温馨提示×

温馨提示×

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

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

java servlet生命周期如何

发布时间:2026-10-10 07:56:48 来源:亿速云 阅读:90 作者:小樊 栏目:编程语言

Java Servlet 的生命周期由 Servlet 容器(如 Tomcat) 管理,主要包括以下几个阶段:加载与实例化 → 初始化 → 处理请求 → 销毁。下面详细说明:


一、Servlet 生命周期阶段

1️⃣ 加载与实例化(Load & Instantiate)

  • 当容器启动或第一次请求该 Servlet 时:
    • 容器读取 web.xml 或使用注解(@WebServlet)
    • 加载 Servlet 类
    • 通过 无参构造方法 创建 Servlet 实例
  • ⚠️ Servlet 是 单例 的(一个 JVM 中通常只有一个实例)

2️⃣ 初始化(init)

public void init(ServletConfig config) throws ServletException
  • 在 Servlet 实例创建后、第一次处理请求前 调用一次
  • 用于:
    • 读取配置参数
    • 初始化资源(数据库连接、线程池等)
  • 通常重写:
public void init() { }

✅ 只执行一次


3️⃣ 处理请求(service)

protected void service(HttpServletRequest req, HttpServletResponse resp)
  • 每次客户端请求都会调用
  • 默认根据请求方式分发:
    • doGet()
    • doPost()
    • doPut()
    • doDelete()
  • 多线程并发执行(注意线程安全)

4️⃣ 销毁(destroy)

public void destroy()
  • 在 Servlet 被容器卸载前调用一次
  • 用于释放资源:
    • 关闭数据库连接
    • 停止线程
  • 之后 Servlet 实例会被垃圾回收

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

容器启动
   ↓
加载 Servlet 类
   ↓
创建 Servlet 实例
   ↓
init()  ← 只一次
   ↓
service() ← 每次请求
   ↓
destroy() ← 容器关闭

三、示例代码

@WebServlet("/hello")
public class HelloServlet extends HttpServlet {

    @Override
    public void init() {
        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 销毁");
    }
}

四、关键注意点 ⚠️

  1. Servlet 是单例多线程
    • 不要在 Servlet 中定义可变的成员变量
  2. init() 和 destroy() 只执行一次
  3. service() 可被并发调用
  4. 生命周期完全由容器控制,不能手动调用

如果你愿意,我也可以:

  • 对比 Servlet vs Spring MVC
  • 画一张 时序图
  • 讲 load-on-startup 的作用

需要哪一个?

向AI问一下细节

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

AI
助
手