zoukankan      html  css  js  c++  java
  • JavaWeb 之 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 }

      运行结果:

      

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

       

    二、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被销毁之前执行,一般用于释放资源  

      

     

  • 相关阅读:
    PO BO VO DTO POJO DAO DO这些Java中的概念分别指一些什么?
    前端面试题汇总(待续)
    vue lottie vue-lottie : 使用教程
    webstorm 换行时 代码不对齐
    webstorm 导出编辑器配置.editorconfig
    vue 查看dist文件里的结构
    vue-cli 生产打包
    element form 校验数组每一项
    typescript无法识别vue中的$refs
    mac 10.14.5 [vue create的时候 mkdir没有权限]
  • 原文地址:https://www.cnblogs.com/niujifei/p/15107292.html
Copyright © 2011-2022 走看看