Servlet生命周期
1.servlet容器
Tomcat是一个servlet容器。
启动tomcat,tomcat会为每一个servlet类创建唯一的servlet对象,然后保存在容器中。
2.Servlet生命周期
实例化:会加载web.xml文件,为每一个servlet类创建一个servlet对象。
初始化:实例化完毕,tomcat会调用servlet对象的init()来完成对象的初始化工作。
服务:当有请求时,tomcat会调用servlet对象的service()方法完成请求处理和响应设置。
销毁:关闭tomcat时,tomcat会调用servlet对象的destroy()方法销毁。
测试代码
public class LifeServlet extends HttpServlet{
public LifeServlet() {
System.out.println("实例化");
}
int a;
@Override
public void init() throws ServletException {
a=9;
System.out.println("初始化"+a);
}
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("服务");
}
@Override
public void destroy() {
System.out.println("销毁");
}
}
web.xml配置
<servlet>
<servlet-name>life</servlet-name>
<servlet-class>com.servletDemo.servlet.LifeServlet</servlet-class>
//
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>life</servlet-name>
<url-pattern>/life</url-pattern>
</servlet-mapping>
注意:整个生命周期中,服务是多次的,而实例化、初始化、销毁只有一次。
实例化+初始化的两种情况:
第一种,启动tomcat时,完成实例化和初始化;
第二种(默认),第一次接受请求时,先完成实例化和初始化,然后再服务。
就是上面的web.xml
中的<load-on-startup>1</load-on-startup>
配置
它的值必须是一个整数,表示servlet被加载的先后顺序。
如果该元素的值为负数或者没有设置,则容器会当Servlet被请求时再加载。(启动tomcat不会被加载,只有访问这个servlet时才实例化和初始化)
如果值为正整数或者0时,表示容器在应用启动时就加载并初始化这个servlet,值越小,servlet的优先级越高,就越先被加载。值相同时,容器就会自己选择顺序来加载。(tomcat启动时就会被实例化和初始化)