Java Web Servlet 继承结构和生命周期
Java Web Servlet 继承结构和生命周期
继承结构
继承关系如下图所示

抽象类Servlet有以下接口,其中init(),service(),destroy()三个主要方法。其中init是servlet初始化用,service为接收http请求用,destroy为servlet销毁时调用的接口
public interface Servlet {
void init(ServletConfig var1) throws ServletException;
ServletConfig getServletConfig();
void service(ServletRequest var1, ServletResponse var2) throws ServletException, IOException;
String getServletInfo();
void destroy();
}
GenericServlet添加了一些与配置有关的方法。
HttpServlet实现了Service方法,根据请求的状态调用对应的do方法进行处理。

生命周期
通常情况下,tomcat在启动时不会初始化servlet,而是在用户进行调用时才会进行对应Servlet的初始化操作,这样可以提高服务器的启动速度。
类的构建是通过tomcat反射构造方法进行构造。
之后调用init方法进行初始化。
通过service方法进行对请求的处理。
只有在tomcat容器关闭的时候Servlet才会被销毁。
Servlet是单例、线程不安全的。
测试
public class LifeServlet extends HttpServlet {
public LifeServlet(){
System.out.println("构造。。。");
}
@Override
public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
System.out.println("一次服务");
super.service(req, res);
}
@Override
public void destroy() {
System.out.println("销毁");
super.destroy();
}
@Override
public void init() throws ServletException {
System.out.println("初始化");
super.init();
}
}
启动tomcat,可以看到在启动的时候LifeServlet并未被初始化,通过页面访问该Servlet

可以看到tomcat实例化了该类并进行服务

刷新页面也只会重新调用service方法而不会重新构造Servlet。

关闭容器,可以看到Servlet被销毁了。

启动容器时就加载类
上面说到,在调用是再初始化类会提高服务器启动的速度,但是会降低用户第一次访问的质量。
如果要想在容器启动的时候就初始化类需要在web.xml中增加一条配置
<servlet>
<servlet-name>LifeServlet</servlet-name>
<servlet-class>com.javawebdemo.LifeServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
load-on-startup里的数字为加载优先级,数字越小优先级越高,最小为0。

浙公网安备 33010602011771号