Servlet的生命周期

Servlet的生命周期阶段

Servlet的生命周期由Servlet容器(如Tomcat)管理,主要分为以下阶段:

  1. 加载和实例化

    容器通过类加载器加载Servlet类,并调用无参构造函数创建Servlet实例。通常发生在首次请求时或容器启动时(通过<load-on-startup>配置)。

  2. 初始化(init)

    调用init(ServletConfig config)方法,完成一次性初始化操作(如加载资源)。该方法仅在生命周期内执行一次。若初始化失败,容器会卸载Servlet。

  3. 服务处理(service)

    对于每个请求,容器调用service()方法,并根据请求类型(GET/POST等)分发给doGet()doPost()等具体方法。Servlet可同时处理多个请求(需注意线程安全)。

  4. 销毁(destroy)

    容器在卸载Servlet前调用destroy()方法,释放资源(如关闭数据库连接)。调用后实例被标记为垃圾回收。

关键方法说明

  • init(ServletConfig config)

    接收容器提供的配置参数(如web.xml中的<init-param>),可通过getServletConfig()获取。

  • service(HttpServletRequest req, HttpServletResponse res)

    默认实现将请求分发给对应的doXxx()方法。通常无需重写。

  • destroy()

    确保在方法内完成资源清理,避免内存泄漏。

线程安全注意事项

  • Servlet实例默认是单例多线程的,避免在service()doXxx()中使用实例变量。
  • 如需共享数据,使用同步块或线程安全集合(如ConcurrentHashMap)。

配置示例(web.xml)

XML 复制代码
<servlet>
    <servlet-name>ExampleServlet</servlet-name>
    <servlet-class>com.example.ExampleServlet</servlet-class>
    <load-on-startup>1</load-on-startup>  <!-- 启动时初始化 -->
    <init-param>
        <param-name>config</param-name>
        <param-value>value</param-value>
    </init-param>
</servlet>

生命周期图示

复制代码
加载 → 实例化 → init() → (多次service()) → destroy() → 垃圾回收
相关推荐
DianSan_ERP2 天前
电商API接口全链路监控:构建坚不可摧的线上运维防线
大数据·运维·网络·人工智能·git·servlet
B站计算机毕业设计超人2 天前
计算机毕业设计Django+Vue.js高考推荐系统 高考可视化 大数据毕业设计(源码+LW文档+PPT+详细讲解)
大数据·vue.js·hadoop·django·毕业设计·课程设计·推荐算法
B站计算机毕业设计超人2 天前
计算机毕业设计Django+Vue.js音乐推荐系统 音乐可视化 大数据毕业设计 (源码+文档+PPT+讲解)
大数据·vue.js·hadoop·python·spark·django·课程设计
十月南城2 天前
数据湖技术对比——Iceberg、Hudi、Delta的表格格式与维护策略
大数据·数据库·数据仓库·hive·hadoop·spark
王九思2 天前
Hive Thrift Server 介绍
数据仓库·hive·hadoop
Asher05093 天前
Hive核心知识:从基础到实战全解析
数据仓库·hive·hadoop
xhaoDream3 天前
Hive3.1.3 配置 Tez 引擎
大数据·hive·tez
yumgpkpm3 天前
AI视频生成:Wan 2.2(阿里通义万相)在华为昇腾下的部署?
人工智能·hadoop·elasticsearch·zookeeper·flink·kafka·cloudera
Asher05093 天前
Hadoop核心技术与实战指南
大数据·hadoop·分布式
小道仙973 天前
jenkins对接、jenkins-rest
java·servlet·jenkins·jenkins-rest