JavaWeb 之 Servlet 的生命周期 一、Servlet 的生命周期 二、Servlet生命周期详解  

  1、生命周期

    第一步:执行 Servlet 的构造器方法

    第二部:执行 init 初始化方法

    第三步:执行 service 方法

    第四步:执行 destory 销毁方法

  2、说明

    第一、二步,是在第一次访问的时候创建 Servlet 程序会调用;

    第三步,每次访问都会调用;

    第四步,在 web 工程停止的时候调用;

  3、案例说明

 1 import javax.servlet.*;
 2 import java.io.IOException;
 3 
 4 public class HelloServlet2 implements Servlet {
 5     public HelloServlet2() {
 6         System.out.println("1、构造器方法");
 7     }
 8 
 9     /**
10      * 初始化方法,在servlet被创建时,执行,只会执行一次
11      *
12      * @param servletConfig
13      * @throws ServletException
14      */
15     @Override
16     public void init(ServletConfig servletConfig) throws ServletException {
17         System.out.println("2、初始化方法init...");
18     }
19 
20     /**
21      * 获取servletconfig对象
22      * servletConfig:servlet的配置对象
23      *
24      * @return
25      */
26     @Override
27     public ServletConfig getServletConfig() {
28         return null;
29     }
30 
31     /**
32      * service:提供服务方法,专门用来处理请求和响应的
33      * 每一次servlet被访问时,执行,执行多次
34      *
35      * @param servletRequest
36      * @param servletResponse
37      * @throws ServletException
38      * @throws IOException
39      */
40     @Override
41     public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
42         System.out.println("3、服务方法service...");
43     }
44 
45     /**
46      * 获取servlet的一些信息,如版本,作者等。。
47      *
48      * @return
49      */
50     @Override
51     public String getServletInfo() {
52         return null;
53     }
54 
55     /**
56      * 销毁方法
57      * 在服务器正常关闭时,在servlet被杀死时,被执行,只执行一次
58      */
59     @Override
60     public void destroy() {
61         System.out.println("4、销毁方法destory...");
62     }
63 }

  运行结果:

  JavaWeb 之 Servlet 的生命周期
一、Servlet 的生命周期
二、Servlet生命周期详解
 

   关闭web容器时触发 destory() 方法

   JavaWeb 之 Servlet 的生命周期
一、Servlet 的生命周期
二、Servlet生命周期详解
 

二、Servlet生命周期详解

 1、被创建时期

    执行 Servlet 构造器方法,一般是在第一次访问 Servlet时,由Web容器(Tomcat)来创建 Servlet。

    Servlet什么时候被创建?

      默认情况下,Servlet 第一次被访问,Servlet 被 Web 容器创建。

    可以配置 Servlet 的创建时机

      在 web.xml 中 <servlet> 标签下配置 <load-on-startup>,默认值为 -1。

      ① 第一次访问时,创建,设置 <load-on-startup>的值为负数

      ② 在服务器启动时,创建,设置<load-on-startup>的值为0或正整数

1     <!--配置servlet-->
2     <servlet>
3         <!--servlet名称-->
4         <servlet-name>demo1</servlet-name>
5         <!--servlet全类名-->
6         <servlet-class>cn.ks.web.servlet.ServletDemo1</servlet-class>
7         <!-- 创建时机-->
8         <load-on-startup>5</load-on-startup>
9     </servlet>

  2、初始化时期

    当类被创建后,立刻执行 init() 初始化方法,只执行一次。

    Servlet的 init() 方法,只执行一次(一般用来加载资源),说明一个Servlet在内存中只存在一个对象,Servlet是单例的

       a、多个用户同时访问时,可能存在线程安全问题。

       b、解决:尽量不要在Servlet中定义成员变量。即使定义了成员变量,也不要对修改值

  3、服务时期

      该时期执行 service() 方法来提供服务,这个方法可以执行多次。每次访问 servlet 时,Service 方法都会被调用一次。

  4、销毁时期

    被销毁时,执行 destory() 方法,只执行一次

      ① Servlet被销毁时执行。服务器关闭时,Servlet被销毁

      ② 只有服务器正常关闭时,才会执行destroy方法。

      ③ destroy方法在Servlet被销毁之前执行,一般用于释放资源