1 什么是Servlet的生命周期?
servlet容器如何创建servlet对象、如何对其进行初始化处理、如何调用其方法处理请求,以及如何销毁该对象的整个过程。
2 生命周期分成哪几个阶段?
2.1 实例化
2.1.1)容器调用servlet的构造器,创建servlet对象。
2.1.2)什么时候实例化?
情形1:容器收到请求之后。
情形2:容器启动之后,立即创建。
注:需要额外的配置。
<!--
配置启动加载:即容器启动之后,
会立即创建相应的实例。
注:
值是一个大于等于零的整数,值越小,
优先级越高(优先被创建)。
-->
<load-on-startup>1</load-on-startup>
2.1.3)容器只会创建一个实例
2.2 初始化
2.2.1)容器调用servlet的init方法。该方法只会执行一次
2.2.2)GenericServlet已经提供了init方法的实现。将容器传递过来的ServletConfig对象保存下来了,并且提供了方法getServletConfig来获得该对象。
2.2.3)只需要override GenericServlet的不带参数的init方法,即可实现自已的初始化处理逻辑
2.2.4)初始化参数
step1.配置初始化参数
<!-- 配置初始化参数 -->
<init-param>
<param-name>company</param-name>
<param-value>IBM</param-value>
</init-param>
step2.使用ServletConfig提供的getInitParameter方法来读取初始化参数。
2.3 就绪(调用)
2.3.1)容器收到请求之后,调用servlet的service方法来处理请求。
2.3.2)HttpServlet已经提供了service方法的实现。依据请求类型调用对应的doXXX方法。比如,get请求调用doGet方法,post请求调用doPost方法(这两个方法内部只是抛出了一个异常)。
2.3.3)我们写servlet,可以有两个选择:一是override HttpServlet的service方法,另外一个选择是override HttpServlet的doGet方法和doPost方法。
2.4销毁
2.4.1)容器在删除servlet对象之前,会调用destroy方法。该方法只会执行一次
2.4.2)GenericServlet已经提供了destroy方法的实现。该方法是一个空方法,什么都没做
2.4.3)override GenericServlet的destroy方法,实现自已的销毁处理逻辑
3 相关的接口与类
3.1 Servlet接口
init(ServletConfig config)
service()
destroy()
3.2 GenericServlet抽象类
实现了Servlet接口中的部分方法(init和destroy)。
3.3 HttpServlet抽象类
继承了GenericServlet,实现了service方法。