(一)JSP/Servlet的生命周期
JSP的本质就是Servlet,开发者编写的JSP页面将有web容器编译成对应的Servlet,当Servlet在容器中运行时,其实例的创建及销毁等都不是由程序员决定的,而是由web容器进行控制的。
创建Servlet实例有两个时机:
1.客户端第一次请求某个Servlet时,系统创建该Servlet的实例:大部分的Servlet都是这种Servlet。
2.web应用启动时候立即创建Servlet实例,即load-on-startup Servlet
每个Servlet的运行都遵行如下生命周期
(1)创建Servlet实例
(2)web容器调用Servlet的init方法,对Servlet进行初始化
(3)Servlet初始化后,将一直存在于容器中,用于响应客户端的请求。如果客户端发送GET请求,容器调用Servlet的doGet方法处理并响应请求;如果客户端发送doPost请求,容器调用Servlet的doPost方法处理并响应请求。或者同一使用Service方法来处理响应用户请求。
(4)web容器决定销毁Servlet时,先调用Servlet的destroy方法,通常在关闭web应用之时销毁Servlet。
(二)load-on-startup Servlet
在Servlet创建的两个时机当中,其中Web容器启动时就创建Servlet,通常是用于某些后台服务的Servlet,或者需要拦截很多的请求的Servlet;这种Servlet通常作为应用的基础Servlet使用,提供重要的后台服务。
配置load-on-startup的Servlet有两种方式:
(1)在web.xml文件中通过<servlet·······/>元素的<load-on-startup······/>子元素进行配置
(2)通过@WebServlet Annotion的loadOnStartup属性指定。
<load-on-startup·······/>元素或loadOnStartup属性都只是接受一个整型值,这个整型值越小,Servlet就越优先实例化。