在本章中,我们将学习JSP的生命周期。理解JSP底层功能的关键是了解它们遵循的简单生命周期。
JSP生命周期定义为从创建到销毁的整个过程。这类似于Servlet生命周期,但需要额外的步骤才能将JSP编译为Servlet。

1. JSP遵循的过程

以下是JSP遵循的过程-

  • 编译
  • 初始化
  • 执行
  • 清理

JSP生命周期的四个主要阶段与Servlet生命周期非常相似。主要分为四个阶段 -

JSP生命周期

1.1. JSP编译

当浏览器请求JSP时,JSP引擎首先检查是否需要编译该页面。 如果该页面从未被编译过,或者自上次编译以来已修改过JSP,则JSP引擎将编译该页面。

编译过程包括三个步骤 -

  • 解析JSP。
  • 将JSP转换为servlet。
  • 编译servlet。

1.2. JSP初始化

当容器加载JSP时,它将在处理任何请求之前调用jspInit()方法。 如果需要执行特定于JSP的初始化,那么可以重写jspInit()方法 -

public void jspInit(){
   // Initialization code...
}

通常,初始化仅执行一次,并且与servlet init()方法一样,通常在jspInit()方法中初始化数据库连接,打开文件或者创建查找表。

1.3. JSP执行

JSP生命周期的此阶段表示直到JSP被销毁之前与请求的所有交互。
每当浏览器请求JSP并且页面已被加载和初始化时,JSP引擎都会在JSP中调用_jspService()方法。
_jspService()方法将HttpServletRequestHttpServletResponse作为其参数,如下所示-

void _jspService(HttpServletRequest request, HttpServletResponse response) {
   // Service handling code...
}

JSP的_jspService()方法是根据请求调用的。它负责为请求生成响应,此方法还负责生成对所有七个HTTP方法的响应,即:GETPOSTDELETE等。

1.4. JSP清理

JSP生命周期的销毁阶段表示何时从容器中删除JSP。

jspDestroy()方法与Servlet的destroy()方法等效。当需要执行任何清理(如释放数据库连接或关闭打开的文件)时,那么可以重写jspDestroy()

jspDestroy()方法具有以下形式-

public void jspDestroy() {
   // Your cleanup code goes here.
}

2. 阶段描述

下表列出了JSP生命周期的每个阶段并进行了描述:

阶段 描述
转换 JSP容器解析JSP页面。它转换JSP页面以生成相应的servlet源代码。如果JSP文件名是hello.jsp,通常容器将其命名为hello_jsp.java
页面编译 如果转换成功,则容器将编译生成的java文件。
类加载 将JSP编译为servlet类后,其生命周期与servlet相似。然后将已编译的类加载到内存中。
实例创建 将JSP类加载到内存后,其对象将由容器实例化。
调用jspInit()或初始化 初始化JSP类是从普通类转换为servlet。 初始化结束后,JSP类即可访问ServletConfigServletContext对象。 jspInit()方法在JSP生命周期中仅被调用一次,它初始化配置参数。
调用_jspService()或请求处理 每个客户请求都调用此方法。
调用jspDestroy()destroy() 这是最后一个阶段,当容器决定从内存中卸载JSP时,将调用此方法。