Servlet系列:生命周期(init、 service、destroy)详解

2024-03-04 0 481

Servlet的生命周期是由Web容器(如Tomcat)管理的,包括以下三个阶段

  1. 加载和实例化:当Web应用程序启动时,Web容器会加载和实例化Servlet。加载和实例化过程可以在应用程序启动时自动完成,也可以通过Servlet的名称手动加载。在实例化Servlet后,Web容器会调用其init()方法进行初始化。
  2. 处理请求:当客户端发送请求时,Web容器会调用Servlet的service()方法处理请求。service()方法会根据请求的类型(GET、POST等)调用doGet()或doPost()方法。除了service()方法外,还可以覆盖doGet()、doPost()、doPut()、doDelete()等方法来处理不同类型的请求。
  3. 销毁:当Web应用程序停止或重新部署时,Web容器会调用Servlet的destroy()方法进行清理。此后,Servlet实例将被回收并释放资源。

在Servlet的生命周期中,init()、service()和destroy()方法是必须实现的。而doGet()、doPost()等其他方法则根据需要实现。需要注意的是,在多个线程同时访问Servlet时,Web容器会对Servlet实例进行同步处理,以保证线程安全。

Servlet没有 main()方法,不能独立运行,它的运行完全由 Servlet 引擎来控制和调度。 所谓生命周期,指的是 servlet 容器何时创建 servlet 实例、何时调用其方法进行请求的处理、 何时并销毁其实例的整个过程。

  • 实例和初始化时机

当请求到达容器时,容器查找该 servlet 对象是否存在,如果不存在,则会创建实例并进行初始化。

  • 就绪/调用/服务阶段

有请求到达容器,容器调用 servlet 对象的 service()方法,处理请求的方法在整个生命周期中可以被多次调用; HttpServlet 的 service()方法,会依据请求方式来调用 doGet()或者 doPost()方法。但是, 这两个 do 方法默认情况下,会抛出异常,需要子类去 override。

  • 销毁时机

当容器关闭时(应用程序停止时),会将程序中的 Servlet 实例进行销毁。

上述的生命周期可以通过 Servlet 中的生命周期方法来观察。在 Servlet 中有三个生命周 期方法,不由用户手动调用,而是在特定的时机有容器自动调用,观察这三个生命周期方法 即可观察到Servlet 的生命周期。

init 方法,在 Servlet 实例创建之后执行(证明该 Servlet 有实例创建了)

    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println("2.初始化");
    }

service 方法,每次有请求到达某个 Servlet 方法时执行,用来处理请求(证明该Servlet 进行服务了)

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("3.处理请求");
    }

destroy 方法,Servlet 实例销毁时执行(证明该 Servlet 的实例被销毁了)

    @Override
    public void destroy() {
        System.out.println("4.销毁了");
    }

Servlet 的生命周期,简单的概括这就分为四步:servlet 类加载-->实例化-->服务-->销毁。

package com.mcode;

import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import java.io.IOException;

/**
 * ClassName: LifeServlet
 * Package: com.mcode
 * Description:
 *
 * @Author: robin
 * @Version: v1.0
 */
@WebServlet("/life")
public class LifeServlet implements Servlet {

    public LifeServlet() {
        System.out.println("1.实例化");
    }

    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println("2.初始化");
    }

    @Override
    public ServletConfig getServletConfig() {
        return null;
    }

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("3.处理请求");
    }

    @Override
    public String getServletInfo() {
        return null;
    }

    @Override
    public void destroy() {
        System.out.println("4.销毁了");
    }
}

Servlet系列:生命周期(init、 service、destroy)详解

整体流程

  1. Web Client 向 Servlet 容器(Tomcat)发出 Http 请求

  2. Servlet 容器接收 Web Client 的请求

  3. Servlet 容器创建一个 HttpServletRequest 对象,将 Web Client 请求的信息封装到这个对象 中

  4. Servlet 容器创建一个 HttpServletResponse 对象

  5. Servlet 容器调HttpServlet 对象service 方法,把 Request 与 Response 作为参数,传给

HttpServlet

  1. HttpServlet 调用 HttpServletRequest 对象的有关方法,获取 Http 请求信息

  2. HttpServlet 调用 HttpServletResponse 对象的有关方法,生成响应数据

  3. Servlet 容器把 HttpServlet 的响应结果传给 Web Client

资源下载此资源下载价格为1小猪币,终身VIP免费,请先
由于本站资源来源于互联网,以研究交流为目的,所有仅供大家参考、学习,不存在任何商业目的与商业用途,如资源存在BUG以及其他任何问题,请自行解决,本站不提供技术服务! 由于资源为虚拟可复制性,下载后不予退积分和退款,谢谢您的支持!如遇到失效或错误的下载链接请联系客服QQ:442469558

:本文采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可, 转载请附上原文出处链接。
1、本站提供的源码不保证资源的完整性以及安全性,不附带任何技术服务!
2、本站提供的模板、软件工具等其他资源,均不包含技术服务,请大家谅解!
3、本站提供的资源仅供下载者参考学习,请勿用于任何商业用途,请24小时内删除!
4、如需商用,请购买正版,由于未及时购买正版发生的侵权行为,与本站无关。
5、本站部分资源存放于百度网盘或其他网盘中,请提前注册好百度网盘账号,下载安装百度网盘客户端或其他网盘客户端进行下载;
6、本站部分资源文件是经压缩后的,请下载后安装解压软件,推荐使用WinRAR和7-Zip解压软件。
7、如果本站提供的资源侵犯到了您的权益,请邮件联系: 442469558@qq.com 进行处理!

猪小侠源码-最新源码下载平台 Java教程 Servlet系列:生命周期(init、 service、destroy)详解 http://www.20zxx.cn/808741/xuexijiaocheng/javajc.html

猪小侠源码,优质资源分享网

常见问题
  • 本站所有资源版权均属于原作者所有,均只能用于参考学习,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担
查看详情
  • 最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,建议提前注册好百度网盘账号,使用百度网盘客户端下载
查看详情

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务