• Servlet的生命周期和自动加载servlet


    一、请求响应过程图

    二、生命周期各个阶段

    1、创建和初始化阶段


    客户端向Servlet容器发出HTTP请求要求访问Servlet时,Servlet容器首先会解析请求,检查内存中是否已经有了该Servlet对象(有可能随着应用的启动而创建),如果有直接使用该Servlet对象,如果没有就创建Servlet实例对象,然后通过调用init()方法实现Servlet的初始化工作。需要注意的是,在Servlet的整个生命周期内,它的init()方法只被调用一次。

    2、运行阶段


    这是Servlet生命周期中最重要的阶段,在这个阶段,Servlet容器会为这个请求创建代表HTTP请求的ServletRequest对象和代表HTTP响应的ServletResponse对象,然后将它们作为参数传递给Servlet的service()方法。service()方法从ServletRequest对象中获得客户请求信息并处理该请求,通过ServletResponse对象生成响应结果。在Servlet的整个生命周期内,对于Servlet的每一次访问请求,Servlet容器都会调用一次Servlet的service()方法,并且创建新的ServletRequest和ServletResponse对象,也就是说,service()方法在Servlet的整个生命周期中会被调用多次。

    3、销毁阶段


    当服务器关闭或web应用被移除出容器时,Servlet随着web应用的销毁而销毁。在销毁Servlet之前,Servlet容器会调用Servlet的destroy()方法,以便让Servlet对象释放它所占用的资源。在Servlet的整个生命周期中,destroy()方法也只被调用一次。需要注意的是,Servlet对象一旦创建就会驻留在内存中等待客户端的访问,直到服务器关闭,或web应用被移除出容器时Servlet对象才会销毁。

    三、演示Servlet生命周期方法的执行

    1、拷贝上面的Servlet,改为HelloWorldServlet,增加生命周期方法

    1. package cn.itcast.firstapp.servlet;
    2. import javax.servlet.*;
    3. public class HelloWorldServlet extends GenericServlet {
    4. public void init(ServletConfig config) throws ServletException {
    5. System.out.println("init methed is called");
    6. }
    7. public void service(ServletRequest request, ServletResponse response) throws ServletException {
    8. System.out.println("Hello World");
    9. }
    10. public void destroy() {
    11. System.out.println("destroy method is called");
    12. }
    13. }

    2、编译HelloWorldServlet.java

    3、拷贝HelloWorldServlet.class到tomcat,位置同上

    4、在web.xml配置HelloWorldServlet

    1. <servlet>
    2. <servlet-name>HelloWorldServletservlet-name>
    3. <servlet-class>cn.itcast.firstapp.servlet.HelloWorldServletservlet-class>
    4. servlet>
    5. <servlet-mapping>
    6. <servlet-name>HelloWorldServletservlet-name>
    7. <url-pattern>/HelloWorldServleturl-pattern>
    8. servlet-mapping>

    5、重新启动tomcat 然后发送如下请求

    http://localhost:8080/chapter03/HelloWorldServlet

    刷新浏览器,多次访问

     

    打开tomcat的管理应用平台,停止chapter03

    四、自动加载servlet

    在实际开发时,有时候会希望某些Servlet可以在Tomcat启动时随即启动。例如,当启动一个Web项目时,首先需要对数据库信息进行初始化。这时,只需要使用web.xml文件中元素,将初始化数据库的Servlet配置为随着web应用启动而启动的Servlet即可。
    元素是元素的一个子元素,它用于指定Servlet被加载的时机和顺序。在元素中,设置的值必须是一个整数。如果这个值是一个负数,或者没有设定这个元素,Servlet容器将在客户端首次请求这个Servlet时加载它;如果这个值是正整数或0,Servlet容器将在Web应用启动时加载并初始化Servlet,并且的值越小,它对应的Servlet就越先被加载。

    在web.xml中增加元素,如下:

    1. <servlet>
    2. <servlet-name>HelloWorldServletservlet-name>
    3. <servlet-class>cn.itcast.firstapp.servlet.HelloWorldServletservlet-class>
    4. <load-on-startup>1load-on-startup>
    5. servlet>

     再重新启动tomcat,就能看到初始化方法被调用,如下:

  • 相关阅读:
    CAD Exchanger SDK 3.23.0 的亮点
    hookZz,Dobby,xHook,consoleDebugger
    (21)语义分割--deeplabv1v2和v3
    css-vxe-form-item中输入框加自定义按钮(校验位置错误)
    整站抓取的神器
    数字孪生车间
    华为防火墙基本原理工作方法总结
    你觉得程序员是一个需要天赋的职业吗?
    系统太多,多账号互通如何实现?
    JavaScript的路由
  • 原文地址:https://blog.csdn.net/daqi1983/article/details/126853506