2--Servlet的声明周期

Servlet的声明周期

Servlet程序是运行在服务器端的Java程序,其生命受到Web容器的控制,包括:加载程序、初始化、服务、销毁和卸载5部分。
在这里插入图片描述
Servlet生命周期对应的方法:

  1. public void init()throws ServletException: Servlet初始化时调用
  2. public void init(ServletConfig config)throws ServletException: Servlet初始化时调用,可以通过ServletConfig读取配置信息
  3. public abstract void service(ServletRequest req,ServletResponse res)throws ServletException,IOException: Servlet服务,一般不会直接覆写此方法,而是使用doGet()或doPost()方法
  4. public void destroy(): Servlet销毁时调用
    各个生命周期的作用:
    1.加载Servlet:
    Web容器负责加载Servlet,当Web容器启动时或者是第一次使用这个Servlet时,容器会负责创建Servlet的实例,但是用户必须通过部署描述(web.xml)指定Servlet的位置(Servlet所在的包.类名称),成功加载后,Web容器会通过反射的方式对Servlet进行实例化。
    2.初始化:
    当一个Servlet被实例化后,容器会调用init()方法初始化这个对象,初始化的目的是为了让Servlet对象在处理客户端请求前完成一些初始化的工作,如:建立数据库的连接、读取资源文件信息等,如果初始化失败,此Servlet将直接被卸载。
    3.处理服务:
    当请求提交时,Servlet将调用service()方法(常用的是doGet()和doPost()方法)进行处理,在service()方法中,Servlet可以通过ServletRequest接收客户端的请求,也可以利用ServletResponse设置响应的信息。
    4.销毁:
    当Web容器关闭或者检测到一个Servlet要从容器中被删除时,会自动调用destroy()方法,让实例释放掉所占用的资源
    5.当一个Servlet调用完destroy()方法后,此实例将被垃圾回收机制回收,如果此Servlet再次被使用,会重新调用init()方法初始化。
    在正常情况下,Servlet只会初始化一次,而处理服务会调用多次,销毁也只会调用一次,但是如果一个Servlet长时间不使用,也会被容器自动销毁,如果需要再次被使用时,会重新初始化的操作,即在特殊情况下初始化可能会进行多次,销毁也可能进行多次。
    实例:演示Servlet的声明周期
package com.qwy.servlet;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * Servlet声明周期演示
 * @author qwy
 * @create 2021-03-09 16:17
 **/
public class ServletLife extends HttpServlet {
    
    
    public ServletLife() {
    
    
        System.out.println("1.构造方法---ServletLife.ServletLife");
    }

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    
    
        System.out.println("3.服务方法---ServletLife.service");
    }

    @Override
    public void destroy() {
    
    
        System.out.println("4.销毁方法---ServletLife.destroy");
    }

    @Override
    public void init(ServletConfig config) throws ServletException {
    
    
        System.out.println("2.初始化方法---ServletLife.init");
    }
}

实例:web.xml中配置

<servlet>
        <servlet-name>ServletLife</servlet-name>
        <servlet-class>com.qwy.servlet.ServletLife</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>ServletLife</servlet-name>
        <url-pattern>/life</url-pattern>
    </servlet-mapping>

浏览器访问:http://localhost:8080/servlet01/life
控制台输出:
1.构造方法—ServletLife.ServletLife
2.初始化方法—ServletLife.init
3.服务方法—ServletLife.service

浏览器重复访问:http://localhost:8080/servlet01/life
此时只有3.服务方法—ServletLife.service重复输出

正常关闭服务器输出:
4.销毁方法—ServletLife.destroy

Servlet初始化的时机

  1. 默认情况下,初始化方法是在第一次使用时调用
  2. 实际上也可以通过配置web.xml文件,在容器启动时就自动为Servlet初始化

实例:修改web.xml

<servlet>
        <servlet-name>ServletLife</servlet-name>
        <servlet-class>com.qwy.servlet.ServletLife</servlet-class>
        <!--容器启动时,初始化该Servlet-->
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>ServletLife</servlet-name>
        <url-pattern>/life</url-pattern>
    </servlet-mapping>

此时启动tomcat服务器,控制台输出:
1.构造方法—ServletLife.ServletLife
2.初始化方法—ServletLife.init

猜你喜欢

转载自blog.csdn.net/qwy715229258163/article/details/114586179