JSP 的生命周期

JSP 的生命周期本质上是Servlet 的生命周期(因为 JSP 最终会被编译为 Servlet 类),分为以下 7 个阶段:

阶段 1:编译阶段(JSP → Servlet)

  • Web 容器(如 Tomcat)首次接收到 JSP 请求时,会先将 JSP 文件解析为 Java 源文件(Servlet 类,命名规则如xxx_jsp.java);
  • 再将 Java 源文件编译为字节码文件(xxx_jsp.class)。
  • 后续请求若 JSP 文件未修改,容器会跳过编译阶段,直接执行已编译的 Servlet。

阶段 2:加载与实例化

容器加载编译后的 Servlet 类,并创建该类的实例(通过newInstance())。

阶段 3:初始化(init ())

容器调用 JSP 对应的 Servlet 实例的jspInit()方法(JSP 专属的初始化方法,可通过<%! void jspInit() { ... } %>重写),完成初始化操作(如加载配置、创建数据库连接池)。

  • 该方法仅在实例创建后执行一次

阶段 4:请求处理(service ())

容器调用_jspService(HttpServletRequest request, HttpServletResponse response)方法处理客户端请求:

  • 每次请求都会触发该方法;
  • 方法内部处理 JSP 中的 Java 代码、表达式,并生成动态 HTML 响应。
  • 注意:_jspService()是自动生成的,开发者不能手动重写。

阶段 5:销毁(destroy ())

当 Web 容器关闭、或 JSP 实例被移除时,容器调用jspDestroy()方法(可通过<%! void jspDestroy() { ... } %>重写),释放资源(如关闭数据库连接、清理缓存)。

  • 该方法仅执行一次

核心总结:

编译(首次请求)→ 加载实例化 → 初始化(jspInit)→ 处理请求(_jspService,多次)→ 销毁(jspDestroy)。