Servlet的生命周期-servlet生命周期.md

焦虑烧麦 161 2022-05-02

init(); service(); destroy(); 是Servlet生命周期的方法,代表了Servlet从 "初始化" - "提供服务" - "销毁" 的过程。

  1. init():初始化方法。在Servlet被创建时执行,但只会执行一次。我们可以利用init( )方法来执行相应的初始化工作。调用这个方法时,Servlet容器会传入一个ServletConfig对象进来从而对Servlet对象进行初始化。

  2. service():提供服务方法。每一次Servlet被访问时执行,执行多次。第一次请求时,Servlet容器会先调用init( )方法初始化一个Servlet对象出来,然后会调用它的service( )方法进行工作,但在后续的请求中,Servlet容器只会调用service方法了。

  3. destory():销毁方法。在服务器被正常关闭时执行,执行一次。一般在这个方法中会写一些清除代码。

下面是Servlet生命周期的例子:

public class ServletTest implements Servlet {
    /*初始化方法
     * 在Servlet被创建时,执行 但只会执行一次*/
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println("init()执行了......");
        System.out.println("初始化一个Servlet对象,但是这个方法在后续请求中不会在被Servlet容器调用");
    }

    /*获取ServletConfig对象
     * ServletConfig: Servlet的配置对象*/
    @Override
    public ServletConfig getServletConfig() {
        return null;
    }

    /*提供服务方法
     * 每一次Servlet被访问时,执行,执行多次*/
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("service()执行了.......");
        System.out.println("每当请求Servlet时,Servlet容器就会调用这个方法");
    }

    //获取一些Servlet的信息,版本,作者等。。。。
    @Override
    public String getServletInfo() {
        return null;
    }

    /*销毁方法
     * 在服务器被正常关闭时,执行,执行一次*/
    @Override
    public void destroy() {
        System.out.println("Servlet将要销毁了.......");
        System.out.println("当要销毁Servlet时,Servlet容器就会调用这个方法");
    }
}

运行后多次刷新会得到以下结果:

output1.jpg

注意:

需要在web.xml中正确配置
如我的这个例子

<servlet>
        <servlet-name>test1</servlet-name>
        <servlet-class>ServlerDemo.ServletTest</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>test1</servlet-name>
        <url-pattern>/ServletTest1</url-pattern>
    </servlet-mapping>

Servlet生命周期源码地址