温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

什么是Servlet生命周期

发布时间:2026-09-19 19:24:40 来源:亿速云 阅读:97 作者:小樊 栏目:编程语言

Servlet 生命周期指的是一个 Servlet 从被加载到被销毁的整个过程,由 Servlet 容器(如 Tomcat) 负责管理。理解生命周期有助于掌握 Servlet 的初始化、请求处理和资源释放时机。


一、Servlet 生命周期的主要阶段

Servlet 生命周期一般包括以下几个阶段:

  1. 加载和实例化(Loading & Instantiation)
  2. 初始化(Initialization)
  3. 处理请求(Request Handling)
  4. 销毁(Destruction)

二、各阶段详细说明

1. 加载和实例化

  • 当容器启动,或第一次接收到对应 Servlet 的请求时:
    • 容器加载 Servlet 类
    • 调用其 无参构造方法 创建 Servlet 实例
  • Servlet 实例在容器中 通常是单例的(每个 JVM 一个实例)

2. 初始化:init()

public void init(ServletConfig config) throws ServletException
  • 在 Servlet 实例化后、处理请求前调用
  • 只执行一次
  • 常用于:
    • 读取配置参数
    • 建立数据库连接
    • 初始化共享资源

若 init() 抛异常,Servlet 不会被投入使用


3. 处理请求:service()

public void service(ServletRequest req, ServletResponse res)
  • 每次客户端请求都会调用
  • 容器会:
    • 调用 service()
    • 根据请求类型(GET/POST)调用 doGet() / doPost() 等

特点:

  • 多线程并发执行
  • Servlet 实例是共享的,因此要注意线程安全

4. 销毁:destroy()

public void destroy()
  • 在 Servlet 被移除或容器关闭时调用
  • 只执行一次
  • 常用于:
    • 释放数据库连接
    • 关闭线程
    • 清理资源

三、生命周期流程图(文字版)

容器启动 / 首次请求
        ↓
加载 Servlet 类
        ↓
创建 Servlet 实例
        ↓
调用 init()
        ↓
多次调用 service()(处理请求)
        ↓
容器关闭 / 卸载
        ↓
调用 destroy()

四、示例 Servlet

public class HelloServlet extends HttpServlet {
    @Override
    public void init() throws ServletException {
        System.out.println("Servlet 初始化");
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws IOException {
        resp.getWriter().write("Hello Servlet");
    }

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

五、关键注意点

  • ✅ Servlet 是 单实例、多线程
  • ✅ init() 和 destroy() 只执行一次
  • ❌ 不要在 Servlet 中定义可变的成员变量来保存请求数据
  • ✅ 资源初始化放在 init(),释放放在 destroy()

如果你愿意,我也可以对比 Servlet 与 Spring MVC / Filter 的生命周期,或者画一张更直观的时序图。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手