Servlet的生命周期

Servlet 生命周期概述

Servlet的生命周期由Servlet容器(如Tomcat)管理,主要包括初始化、服务和销毁三个阶段。每个阶段对应特定的方法,开发者可以通过重写这些方法实现自定义逻辑。

初始化阶段(init)

当Servlet第一次被请求或容器启动时,容器会调用init()方法进行初始化。该方法仅在Servlet生命周期中执行一次。

java 复制代码
public void init(ServletConfig config) throws ServletException {
    // 初始化代码(如数据库连接、配置文件加载)
}
  • ServletConfig参数提供Servlet的配置信息(如web.xml中的<init-param>)。
  • 若初始化失败,抛出ServletException,Servlet不会被加载。

服务阶段(service)

初始化完成后,Servlet进入服务阶段。每次客户端请求时,容器会调用service()方法处理请求。

java 复制代码
protected void service(HttpServletRequest req, HttpServletResponse resp) 
    throws ServletException, IOException {
    // 根据请求方法(GET/POST)调用doGet()或doPost()
}
  • 默认实现根据HTTP方法(GET、POST等)分发到对应的doGet()、doPost()等方法。
  • 开发者通常直接重写doGet()或doPost(),而非service()。

销毁阶段(destroy)

当容器决定卸载Servlet(如应用关闭或资源回收时),会调用destroy()方法释放资源。

java 复制代码
public void destroy() {
    // 清理资源(如关闭数据库连接)
}
  • 方法执行后,Servlet实例被标记为可垃圾回收。

生命周期流程图

  1. 容器加载Servlet类。
  2. 调用init()初始化。
  3. 对每个请求调用service()(内部调用doGet()/doPost())。
  4. 容器卸载时调用destroy()。

注意事项

  • 线程安全 :Servlet是单例的,多个请求共享同一实例。避免在service()或doGet()/doPost()中使用实例变量。
  • 懒加载 :可通过<load-on-startup>配置在容器启动时立即初始化。
  • 重新初始化 :Servlet被销毁后,若再次请求,容器会重新创建实例并调用init()。
相关推荐
白露与泡影7 分钟前
Spring AI Alibaba -- 文生图、文生音及向量化
java·人工智能·spring
滕州市燕猫虎计算机科技工作室个体工商户8 分钟前
Java,Java NIO,Java NIO2,Java AIO,AsynchronousServerSocketChannel
java·开发语言·nio·aio·nio2
学长毕设17 分钟前
基于springboot的社会志愿者管理系统-附源码
java·spring boot·后端
木头科技33 分钟前
【AI 工程化第十六篇】Spring AI 多模态 RAG 实战:图片、扫描件、表格与图文证据链
java·人工智能·spring
驭渊的小故事39 分钟前
从 JVM 底层看泛型:泛型擦除、Signature 属性与 Super Type Token 模式
java·开发语言·jvm
菜鸟小杰子41 分钟前
手动修改 Spring Boot 嵌套 JAR 包:大包小包隔离打包实战
java·jar
计算机编程-吉哥1 小时前
计算机毕业设计 基于 SpringBoot + Vue 的剧本杀系统 Java毕业设计【任务书、开题报告、中期报告、论文、源码】
java·vue.js·spring boot·毕业设计·课程设计·计算机毕业设计选题
code2cat1 小时前
【随笔】RAG语义缓存:问题很相似,答案就能直接复用吗
java·缓存·知识库·rag
Rain的Java大神之路1 小时前
面了 50 个候选人,90% 都挂在 LeetCode 3 无重复字符的最长子串:滑动窗口的 5 个致命坑
java·后端·leetcode
西凉的悲伤1 小时前
Jsoup 库 HTML 解析详解
java·前端·html·jsoup