Servlet的生命周期

一、实例化

  1、什么是实例化?

    容器创建Servlet对象

  2、创建的时机  

    可以是在容器收到针对这个组件的请求之后,即用了才创建;

    也可以在容器启动之后立刻创建实例,而不管此时Servlet是否使用的上。

    创建的具体时机可以设置:

<servlet>
    <servlet-name>someServlet</servlet-name>
    <servlet-class>test.SomeServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
     <servlet-name>someServlet</servlet-name>
     <url-pattern>/*</url-pattern>
</servlet-mapping>
    配置文件说明:load-on-startup节点用于设置该Servlet的创建时机。   
      1、当其中的值大于等于0时,表示容器在启动时就会创建实例
      2、小于0时或没有指定时,代表容器在该Servlet被请求时再执行创建
      3、正数的值越小,优先级越高,应用启动时就越先被创建。

 

二、初始化

  1、什么是初始化?

    init()方法被调用。Servlet在被加载实例化之后,必须要初始化它。

    这个方法在javax.servlet.Servlet接口中定义,其中,方法以一个ServletConfig类型的对象作为参数。ServletConfig对象由Servlet引擎负责创建,从中可以读取到事先在web.xml文件中通过<init-param>节点配置的多个name-value名值对。ServletConfig对象还可以让Servlet接受一个ServletContext对象。一般情况下,init方法不需要编写,因为GenericServlet已经提供了init方法的实现,并且提供了getServletConfig()来获得ServletConfig对象。

    注:init方法只被执行一次。
 
以下代码为在servlet配置中,增加初始化参数
<servlet>
        <servlet-name>someServlet</servlet-na me>
        <servlet-class>test/SomeServlet</servlet-class>
        <init-param>
              <param-name>debug</param-name>
              <param-value>true</param-valule>
         </init-param>
 </servlet>
    可以用如下方法读取Servlet配置中增加的初始化参数
        ServletConfig config = getServletConfig();
        String debug = config.getInitParameter("debug");
 

三、就绪(调用)

  1、什么是调用?  
    容器收到请求之后,会调用servlet实例的service方法
 
  2、HttpServlet的service方法是如何实现的?
    依据请求类型,分别调用对应的doPost或者doGet方法
    doGet方法处理get请求,doPost方法处理post请求
 
 

四、销毁

  1、什么是销毁?
    容器在删除servlet实例之前,会调用该实例的destroy方法。该方法只会执行一次。
  2、可以重写GenericServlet提供的init方法来实现自已的销毁处理逻辑。
 

posted @ 2019-08-16 11:11  但偏偏  阅读(139)  评论(0编辑  收藏  举报