Servlet的生命周期

servlet的生命周期顾名思义就是从servlet出现到消亡(销毁)的全过程。

主要分为以下几个阶段:
加载类—>实例化(为对象分配空间)—>初始化(为对象的属性赋值)—>请求响应(服务阶段)—>销毁

servlet生命周期三个方法:

init()初始化阶段

service()处理客户端请求阶段

destroy()终止阶段

​ 容器(tomcat等)装载servlet

实例化阶段

1.1 当客户端首次发送第一次请求后,由Servlet容器去解析请求,根据请求找到是否有对应的servlet。
1.2 判断是否有Servlet实现类的对象存在?存在则直接使用,不存在则先创建一个servlet实现类的对象。

初始化阶段

Servlet 初始化是其生命周期的第一个阶段,也是其他阶段的基础。只有完成了初始化,Servlet 才能处理来自客户端的请求。

Servlet 初始化阶段分为 2 步:

  1. 加载和实例化 Servlet;
  2. 调用 init() 方法进行初始化

1.加载和实例化

Servlet 容器负责加载和实例化 Servlet。

当容器启动或首次请求某个 Servlet 时,容器会读取 web.xml (配置load-on-startup=1,默认为0)或 @WebServlet 中的配置信息,对指定的 Servlet 进行加载。加载成功后,容器会通过反射对 Servlet 进行实例化。

2.调用 init() 方法进行初始化

加载和实例化完成后,Servlet 容器会创建一个servlet对象并调用servlet的init方法(在servlet生命周期内只能调用一次init方法)去初始化 Servlet 实例。

请求响应阶段

初始化完成后调取service()方法,由service()判断客户端的请求方式。
3.1 如果是get请求,则执行doGet()方法。
3.2 如果是post请求,则执行doPost()。
3.3 处理方法完成后会作出相应的结果返回给客户端,单次请求处理完毕。

当用户发送第二次以后的请求时,会判断对象是否存在,但是不再执行init(),而直接执行service方法调取doGet() / doPost()方法。
 

服务终止阶段

当服务器关闭,重启或移除 Servlet 实例时Servlet调取destroy()方法进行销毁,宣告生命周期的结束。

public class EmpServlet extends HttpServlet{
    //初始化servlet,调用init方法
  
    public void init() throws ServletException {
        System.out.println("初始化时调用");
    }
    //开启服务
  
    protected void service(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException {
        System.out.println("开启服务时调用");
    }

    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        
    }
    //销毁时调用destory


    public void destroy() {
        System.out.println("销毁时调用");
    }
}
 

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐