Servlet的生命周期

Servlet的生命周期

当web容器接收到从浏览器发送过来的请求时,web容器会调用相应的servlet程序去处理这些请求。
servlet对象的生命周期分为:

  • 初始化:若这个servlet程序是第一次被调用,那么init()方法会被调用来完成初始化。
  • 调用:如果servlet对象已经被初始化,那么就会调用service()方法来处理这些请求。
  • 销毁:当服务器关闭的时候,此servlet对象会被销毁。

public class ServletLife extends HttpServlet {
    //当第一次调用这个service时,调用init()方法来完成初始化
    @Override
    public void init() throws ServletException {
        super.init();
        System.out.println("加载servlet对象");
    }

    //servlet对象存在,web容器使用这个servlet处理请求时,调用service()方法.
    // servlet对象只会创建一个,当多个request请求同时请求一个servlet对象的时候,web容器分别对这些请求创建线程。
    @Override
    public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
        super.service(req, res);

        System.out.println("当使用这个servlet处理请求时,调用此方法");
    }

    //当服务器关闭时,调用destroy()方法
    @Override
    public void destroy() {
        super.destroy();
        System.out.println("服务器关闭,此servlet对象销毁。");
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("text/html;charset=utf-8");
        resp.getWriter().println("servlet的生命周期");
    }

//当第一次向这个servlet发送请求时,init()方法被调用,然后调用service()方法来处理请求.
Connected to server
[2020-11-16 08:05:42,620] Artifact servlet:war exploded: Artifact is being deployed, please wait...
16-Nov-2020 20:05:43.379 警告 [RMI TCP Connection(3)-127.0.0.1] org.apache.catalina.util.SessionIdGeneratorBase.createSecureRandom 使用[SHA1PRNG]创建会话ID生成的SecureRandom实例花费了[463]毫秒。
[2020-11-16 08:05:43,402] Artifact servlet:war exploded: Artifact is deployed successfully
[2020-11-16 08:05:43,402] Artifact servlet:war exploded: Deploy took 782 milliseconds
加载servlet对象
当使用这个servlet处理请求时,调用此方法
//当关闭服务器的时候,会调用destory()来销毁此servlet对象
Using CATALINA_OPTS:   ""
NOTE: Picked up JDK_JAVA_OPTIONS:  --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED
16-Nov-2020 20:07:27.217 信息 [main] org.apache.catalina.core.StandardServer.await 通过关闭端口接收到有效的关闭命令。正在停止服务器实例。
16-Nov-2020 20:07:27.218 信息 [main] org.apache.coyote.AbstractProtocol.pause 暂停ProtocolHandler["http-nio-8080"]
16-Nov-2020 20:07:27.688 信息 [main] org.apache.catalina.core.StandardService.stopInternal 正在停止服务[Catalina]
服务器关闭,此servlet对象销毁。

注意: servlet对象只会创建一个,当多个request请求同时请求一个servlet对象的时候,web容器分别对这些请求创建线程。

posted @ 2020-11-16 20:11  xxgbl  阅读(164)  评论(0)    收藏  举报