当前位置: 首页 > article >正文

Servlet⽣生命周期超级细(笔记)

简介: 讲解Servlet的⽣生命周期

  • Servlet 接⼝口⾥里里⾯面有5个⽅方法,其中三个⽣生命周期⽅方法和两个普通⽅方法

1. 加载和初始化阶段

  • 过程

    1. 当一个 Servlet 第一次被客户端请求时或者服务器启动时,Servlet 容器会加载该 Servlet 类(如果未加载过)。
    2. 容器会创建该 Servlet 的一个实例,并调用其 init() 方法进行初始化,Servlet生命周期,仅执行一次init()方法。
  • 触发条件

    • 第一次请求到达时(默认行为)。
    • 配置了 <load-on-startup> 参数,服务器启动时就会加载。
  • 方法

public void init(ServletConfig config) throws ServletException {
    // 初始化代码,例如读取配置文件、连接数据库等
}

作用

  • 用于执行一次性初始化任务,例如读取配置、初始化资源(如数据库连接)。

2. 请求处理阶段

  • 过程

    1. 每次有客户端请求到达时,Servlet 容器会调用该 Servlet 的 service() 方法。
    2. service() 方法根据请求的 HTTP 方法(GET、POST 等)调用对应的 doGet()doPost()doPut() 等方法,这样开发人员可以专注实现请求逻辑,而不需要关心请求分发。
    3. HttpServlet提供默认service实现方法,该方法根据请求方式,调用对应doxx方法,那么开发人员只需根据请求类型重新对应doxx()方法
  • 方法

 @Override
    public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
        super.service(req, res);
    }

作用

  • 处理每个客户端请求并返回响应内容。

3.销毁阶段

  • 过程

    1. 当服务器关闭或 Servlet 被从容器中卸载时,Servlet 容器会调用该 Servlet 的 destroy() 方法。
    2. 资源被释放,例如关闭数据库连接、清理缓存等。
  • 方法

    @Override
    public void destroy() {
        System.out.println("Servlet destroy");
    }
  • 触发条件

    • 容器关闭。
    • 手动卸载应用程序。
  • 作用

    • 释放资源,避免资源泄漏。
  • 关于Servlet继承与实现关系:

Servlet 生命周期方法总结

方法描述
init()Servlet 初始化,仅调用一次。用于加载配置和初始化资源。
service()每次请求都会调用,处理请求并分发给 doGetdoPost 等方法。
destroy()Servlet 被销毁时调用,仅调用一次。用于释放资源或做清理工作。

Servlet 生命周期图解 


最后一点:

1. 默认情况下

  • Servlet 类的加载和实例化通常发生在 用户请求到达时,即“懒加载(Lazy Loading)”模式。
  • 流程:
    1. 客户端发出请求。
    2. Servlet 容器检查该 Servlet 是否已经加载并初始化。
    3. 如果没有加载:
      • 容器加载 Servlet 类。
      • 创建实例并调用 init() 方法。
    4. 然后调用 service() 方法处理请求
  • 配置了 <load-on-startup>

  • 如果在 web.xml 文件中为某个 Servlet 配置了 <load-on-startup> 参数,Servlet 容器会在服务器启动时加载并初始化该 Servlet,也就是调用init()而不需要等待请求。

    <servlet>
        <servlet-name>userServlet</servlet-name>
        <servlet-class>com.gaze.UserServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>

<load-on-startup> 参数说明

  • 正整数:值越小,优先级越高,优先加载。
  • 负整数或省略:默认懒加载模式。

场景推荐

  • 如果某个 Servlet 涉及到初始化复杂资源(如数据库连接池),推荐使用 <load-on-startup> 提前加载,以减少首次请求的响应时间。
  • 对于无特殊需求的 Servlet,可以保留默认的懒加载行为,节省服务器资源。

http://www.kler.cn/a/396935.html

相关文章:

  • 利用OpenAI进行测试需求分析——从电商网站需求到测试用例的生成
  • 领夹麦克风哪个品牌好,手机领夹麦克风哪个牌子好,选购推荐
  • VPI photonics的一些使用经验(测相位 快速搜索)持续更新
  • HarmonyOS Next星河版笔记--界面开发(5)
  • HarmonyOS本地存储-Preferences(用户首选项)的使用
  • 干货分享之Python爬虫与代理
  • 区间和 离散化 模板题
  • CentOS 升级 gcc 版本
  • 项目风险管理的3大要素
  • 如何基于Tesseract实现图片的文本识别
  • Redis 持久化机制 RDB 和 AOF 区别
  • 图像重建之深度学习重建
  • 安全见闻5
  • 深入理解UML通信图:概念、构成与使用示例
  • macbook git 设置和远程克隆项目
  • 每日计划-1116
  • Linux下安装rabbitMQ
  • 知识图谱,语义分析,全文检索,neo4j,elaticsearch,知识库平台(java,vue)
  • 选择香港服务器的带宽和延迟配置时要注意的事项
  • 单向链表题库2(c++)
  • 【Android、IOS、Flutter、鸿蒙、ReactNative 】实现 MVP 架构
  • No Module named pytorchvideo.losses问题解决
  • c++设计模式之策略模式
  • 任务函数分析
  • 常用字符串和集合处理工具类
  • 微信小程序实战篇-分类页面制作