Servlet的生命周期
Servlet的处理过程:
- 输入URL后,回车,向server发请
- 解析URL地址,获取/web应用名称,定位web.xml
- 解析URL地址,获取/url-pattern,定位中的
- 匹配到对应的中的
- 匹配到对应的中的
- 定位到中的
- server检测当前内存中是否存在当前类的对象
不存在-使用反射,创建当前类的对象
存在-直接使用获取的对象
8 .调用service方法,处理客户端请求,最后把结果响应client。
生命周期方法:
阶段 调用方法 调用时间 调用次数
实例化 构造方法 第1请求 1
初始化 init 第1请求 1
服务 service 有请求即调用 N
销毁 destroy 停服务 1
- init(ServletConfig config); //在初始化Servlet对象的时候会调用
- 只有servlet程序第一次被访问的时候才会调用
- 一个Servlet类tomcat只会创建一个Servlet对象
- service(); //servlet对外提供服务时执行的代码
- 每次访问都会执行一次
- destroy(); //Servlet对象被销毁的时候调用,tomcat关闭
注意:
1. 当用户第1次访问时被创建,并调用service方法
2. 当第2次请求到达时不创建新对象,继续调用已存在对象的service方法
3. 当应用停止服务器或tomcat关闭时对象被销毁
使用以下代码,验证servlet的各个阶段:
public class CycleServlet extends HttpServlet {
// 构造
public CycleServlet() {
System.out.println("----------in CycleServlet------------");
}
// 初始化
public void init() {
System.out.println("----------in init------------");
}
// service
public void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
System.out.println("----------in service------------");
}
// destroy
public void destroy() {
System.out.println("----------in destroy------------");
}
}
特殊情况:
<servlet>
<servlet-name>......</servlet-name>
<servlet-class>......</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
- load-on-startup:代表该serlvet在tomcat启动时就实例化和初始化。