JavaWeb学习笔记:Servlet
Servlet
JavaWeb
概念
Java Web应用由一组Servlet、HTML页面、类、以及其他能够被绑定的资源构成。
他能够在各种供应商提供的实现Servlet规范的Servlet容器中执行。
包括内容
- Servlet
- JSP
- 有用类
- 静态文档如HTML、图片等
- 描写叙述Web应用的信息(web.xml)
Servlet与Servlet容器
Servlet
简单介绍
Java Servlet是和平台无关的server端组件。它执行在Servlet容器中。
Servlet容器负责Servlet和客户的通信以及调用Servlet的方法。Servlet和客户的通信採用“请求/响应”的模式。
功能
- 创建并返回基于客户请求的动态HTML页面。
- 创建可嵌入到现有HTML页面中的部分HTML页面(HTML片段)。
- 与其他server资源进行通信。
生命周期相关的方法
下面方法都是由 Serlvet 容器负责调用:
- 构造器:仅仅被调用一次. 仅仅有第一次请求 Servlet 时, 创建 Servlet 的实例. 调用构造器。 这说明 Serlvet 的单实例的!
- init 方法:仅仅被调用一次。 在创建好实例后马上被调用. 用于初始化当前 Servlet。
- service:被多次调用。 每次请求都会调用 service 方法. 实际用于响应请求的。
- destroy:仅仅被调用一次。 在当前 Servlet 所在的 WEB 应用被卸载前调用. 用于释放当前 Servlet 所占用的资源。
Servlet容器
概念
Servlet容器也称为JavaWeb应用容器,或者Servlet/JSP容器,比方Tomcat。
感性认识:执行 Servlet、JSP、Filter 等的软件环境。
Servlet容器为JavaWeb应用提供执行时环境,它负责创建 Servlet、管理Servlet和JSP的生命周期,以及管理它们的共享数据。
訪问流程
第一种是訪问静态页面。另外一种情况是訪问动态页面。事实上也就是通过Servlet来和后台数据库进行交互。
- Web浏览器–>Webserver–>静态页面
- Web浏览器–>Webserver–>Servlet容器(JSP、Servlet)<–>数据库
Servlet容器响应客户请求的过程
客户<-->Servlet容器<-->Servlet
Servlet配置參数
load-on-startup
配置
<servlet>
<!-- Servlet 注冊的名字 -->
<servlet-name>secondServlet</servlet-name>
<!-- Servlet 的全类名 -->
<servlet-class>com.buaa.zhao.SecondServlet</servlet-class>
<!-- 能够指定 Servlet 被创建的时机 -->
<load-on-startup>2</load-on-startup>
</servlet>
说明
load-on-startup能够指定 Serlvet 被创建的时机。若为负数, 则在第一次请求时被创建(也就是说不请求訪问它。不会被创建)。若为 0 或正数, 则在当前 WEB 应用被Serlvet 容器载入时创建实例, 且数组越小越早被创建。
serlvet-mapping
说明
同一个Servlet能够被映射到多个URL上,即多个 <servlet-mapping> 元素的<servlet-name>子元素的设置值能够是同一个Servlet的注冊名。
配置
在Servlet映射到的URL中也能够使用 * 通配符,可是仅仅能有两种固定的格式:一种格式是“.扩展名”,还有一种格式是以正斜杠(/)开头并以“/”结尾。
两种方式仅仅能选其一,也就是说带/的不能带扩展名
<servlet-mapping>
<servlet-name>secondServlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
OR
<servlet-mapping>
<servlet-name>secondServlet</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
Servlet測试程序
通过一个程序,观測Servlet的方法功能。
创建一个 Servlet 接口的实现类
package com.buaa.zhao;
import java.io.IOException;
import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class HelloServlet implements Servlet{
@Override
public void destroy() {
System.out.println("destory.....");
}
@Override
public ServletConfig getServletConfig() {
System.out.println("getServletConfig....");
return null;
}
@Override
public String getServletInfo() {
System.out.println("getServletInfo....");
return null;
}
@Override
public void init(ServletConfig arg0) throws ServletException {
System.out.println("init....");
}
@Override
public void service(ServletRequest arg0, ServletResponse arg1)
throws ServletException, IOException {
System.out.println("service....");
}
public HelloServlet() {
System.out.println("HelloServlet's constructor");
}
}
配置web.xml文件
在文件里加入例如以下内容:
<!-- 配置和映射Servlet -->
<servlet>
<!-- Servlet 注冊的名字 -->
<servlet-name>helloServlet</servlet-name>
<!-- Servlet 的全类名 -->
<servlet-class>com.buaa.zhao.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<!-- 须要和某一个 servlet 节点的 serlvet-name 子节点的文本节点一致 -->
<servlet-name>helloServlet</servlet-name>
<!-- 映射详细的訪问路径: / 代表当前 WEB 应用的根文件夹. -->
<url-pattern>/hello</url-pattern>
</servlet-mapping>
执行測试
启动Tomcatserver,打开http://localhost:8989/JavaWebTest/hello。
控制端部分输出信息:
信息: Server startup in 375 ms
HelloServlet's constructor
init....
service....
service....
service....
service....
service....
service....
service....
service....
七月 26, 2015 11:46:49 上午 org.apache.catalina.core.StandardServer await
信息: A valid shutdown command was received via the shutdown port. Stopping the Server instance.
七月 26, 2015 11:46:49 上午 org.apache.coyote.AbstractProtocol pause
信息: Pausing ProtocolHandler ["http-apr-8989"]
七月 26, 2015 11:46:49 上午 org.apache.coyote.AbstractProtocol pause
信息: Pausing ProtocolHandler ["ajp-apr-8009"]
七月 26, 2015 11:46:50 上午 org.apache.catalina.core.StandardService stopInternal
信息: Stopping service Catalina
destory.....
七月 26, 2015 11:46:50 上午 org.apache.coyote.AbstractProtocol stop
信息: Stopping ProtocolHandler ["http-apr-8989"]
通过输出信息能够观測到:
- 当訪问http://localhost:8989/JavaWebTest/hello时,执行顺序是HelloServlet()–>init()–>service()
- 每次刷新页面,会仅仅调用service(),也就是仅仅输出“service….”
- 关闭server的时候会输出“destory…..”,即调用了destory()
JavaWeb学习笔记:Servlet的更多相关文章
- JavaWeb学习笔记--Servlet代码集
目录: 登录系统提交表单数据打开PDFCookieURL传递参数URL重写跟踪会话使用HttpSession对象跟踪会话Servlet间协作过滤器Filter 登录系统 <!DOCTYPE HT ...
- JavaWeb学习笔记总结 目录篇
JavaWeb学习笔记一: XML解析 JavaWeb学习笔记二 Http协议和Tomcat服务器 JavaWeb学习笔记三 Servlet JavaWeb学习笔记四 request&resp ...
- javaweb学习笔记整理补课
javaweb学习笔记整理补课 * JavaWeb: * 使用Java语言开发基于互联网的项目 * 软件架构: 1. C/S: Client/Server 客户端/服务器端 * 在用户本地有一个客户端 ...
- JavaWeb学习之Servlet(二)----Servlet的生命周期、继承结构、修改Servlet模板
[声明] 欢迎转载,但请保留文章原始出处→_→ 文章来源:http://www.cnblogs.com/smyhvae/p/4140466.html 一.http协议回顾: 在上一篇文章中:JavaW ...
- (转)JavaWeb学习之Servlet(二)----Servlet的生命周期、继承结构、修改Servlet模板
[声明] 欢迎转载,但请保留文章原始出处→_→ 文章来源:http://www.cnblogs.com/smyhvae/p/4140466.html 一.http协议回顾: 在上一篇文章中:JavaW ...
- JavaWeb学习——了解Servlet
JavaWeb学习——了解Servlet 摘要:本文主要学习了什么是Servlet,以及如何使用Servlet进行开发. 基础知识 背景 随着互联网技术的发展,基于HTTP和HTML的web应用急速增 ...
- javaweb学习之Servlet开发(二)
javaweb学习总结(六)--Servlet开发(二) 一.ServletConfig讲解 1.1.配置Servlet初始化参数 在Servlet的配置文件web.xml中,可以使用一个或多个< ...
- Javaweb学习笔记——(二十三)——————AJAX、XStream、JSON
AJAX概述 1.什么是AJAX ajax(Asynchronous JavaScript and xml) 翻译成中文就是"异步JavaScript和xml&quo ...
- Javaweb学习笔记——(二十一)——————过滤器
过滤器 过滤器概述 1.什么是过滤器: 过滤器javaweb三大组件之一,它与Serlvet很相似,不过它过滤器是用来拦截请求的,而不是处理 ...
- JavaWeb学习 (六)————Servlet(二)
一.ServletConfig讲解 1.1.配置Servlet初始化参数 在Servlet的配置文件web.xml中,可以使用一个或多个<init-param>标签为servlet配置一些 ...
随机推荐
- 微信小程序 报警告的解决办法
wx:for 如果没有给它相应的 wx:key 控制台就会有警告,解决的办法给它添加相应的key警告就消失啦
- 【16】vuex2.0 之 getter
有的组件中获取到 store 中的state, 需要对进行加工才能使用,computed 属性中就需要写操作函数,如果有多个组件中都需要进行这个操作,那么在各个组件中都写相同的函数,那就非常麻烦,这 ...
- python之正则表达式【转】
首先说 正则表达式是什么? 正则表达式,又称正规表示式.正规表示法.正规表达式.规则表达式.常规表示法(英语:Regular Expression,在代码中常简写为regex.regexp或RE),计 ...
- jQuery动态创建form表单并提交到后台(携带一定的数据进行页面跳转)
今天遇到这么一个需求,携带一个编号一个名字跳转到另一个JSP页面,直接页面跳转(get携带数据)的话不太安全,于是想到到后台转发一下. 第一种:直接以表单提交方式的进行 JS代码: var form ...
- linux内核情景分析之锁机制
/* * These are the generic versions of the spinlocks and read-write * locks.. *///自旋锁加锁,irqsave表示把标志 ...
- 小记——关于Tilemap图块索引编码
图集 地图 TileMap 导出的 .Tmx 文件记录了地图所有信息,其中编辑好的图块信息会存放在每个图层的 Data 节点下.以下是一个 10x10 的图层,可以看到,Data 节点记录了每个图块对 ...
- Django笔记:常见故障排除
Django框架下MySQLdb模块在python3中无法使用的问题的解决方案 由于python3环境下目前还没有官方的mysqldb模块,Django框架中又强制要求使用mysqldb,为了解决这个 ...
- iOS直播Liveroom组件,游客,用户多次切换登录同一直播间,消息出现多次重复问题解决
byzqk 新版,加入连麦功能,直播的流程修改很多,每次登录都需要登录liveroom组件 期间遇到一个奇葩的问题,就是游客登录组件之后,切换为用户登录,出现im消息重复的问题,一开始以为是游客退出不 ...
- PC网页js调用本地应用程序
最近要现实一个在PC网页中实现点击按钮调用本地应用程序的功能 其实实现原理也非常简单, 首先注册一个本地注册表文件,指向本地应用程序路径 其次在网页中用js指向这个注册表文件,就可以实现网页调用本地应 ...
- Linux中查看某个软件的安装路径
Linux中查看某个软件的安装路径(地址)有时显得非常重要.比如某个文件的快速启动项被删除,或者你要建立快速启动项,或者想删除.添加安装文件等等,很多地方都要用到查案文件安装路径的命令. 这里给大家介 ...