JSP 生命周期

学习 JSP 最重要的关键是去理解 JSP 应用的声明周期,这样我们才能理解 JSP 的底层功能

JSP 生命周期指的是 JSP 应用从创建到销毁的整个过程

JSP 生命周期类似于 Servlet 的生命周期,它们的区别只在于 JSP 生命周期还包括将 JSP 文件编译成 servlet

JSP 的生命周期要经历 编译 -> 初始化 -> 执行 -> 销毁 几个阶段 :

  1. 编译阶段
    Servlet 容器编译 servlet 源文件,生成 servlet 类
  2. 初始化阶段
    加载与 JSP 对应的 servlet 类,创建其实例,并调用它的初始化方法
  3. 执行阶段
    调用与 JSP 对应的 servlet 实例的服务方法
  4. 销毁阶段
    调用与 JSP 对应的 servlet 实例的销毁方法,然后销毁 servlet 实例

JSP 的生命周期是不是和 Servlet 的很相像

JSP 生命周期图示

JSP 生命周期图示

JSP 编译

当浏览器请求一个 JSP 页面时,JSP 引擎会首先去检查是否需要编译这个文件

如果这个文件没有被编译过,或者在上次编译后被更改过,则编译这个 JSP 文件

JSP 编译的过程分为三个步骤:

  1. 解析 JSP 文件
  2. 将 JSP 文件转为 servlet
  3. 编译 servlet

JSP 初始化

编译好 JSP 文件,JSP 容器就会载入 JSP ,然后在处理请求前会先调用 jspInit() 方法

如果我们要执行自定义的 JSP 初始化任务,重写 jspInit() 方法就可以了

jspInit() 方法原型

public void jspInit()
{
    // 初始化代码
}

注意,一般来说程序只会初始化一次,Servlet 和 JSP 也是如此,我们可以在 jspInit()方法中初始化数据库连接、打开文件和创建查询表

JSP 执行

这一阶段 JSP 开始处理请求,包括一切与请求相关的交互行为,直到被销毁

当 JSP 网页完成初始化后,JSP 引擎就会调用 _jspService() 来处理请求

_jspService() 方法

JSP _jspService() 方法需要一个 HttpServletRequest 对象和一个 HttpServletResponse 对象作为它的参数

void _jspService(HttpServletRequest request,
                 HttpServletResponse response)
{
   // 服务端处理代码
}

_jspService() 方法会在每个 request 中被调用一次并且负责创建与之相对应的 response ,并且响应所有 7 个 HTTP 方法,比如 GET、POST、DELETE

JSP 清理

JSP 清理就是把 JSP 页面从 JSP 容器中移除

JSP 容器调用 jspDestroy() 方法来销毁 JSP 页面

当我们需要执行任何清理工作时重写 jspDestroy()方法即可,比如 释放数据库连接或者关闭文件夹等

jspDestroy() 方法

public void jspDestroy()
{
   // 清理代码
}

范例

我们已经了解了 JSP 整个生命周期,现在,让我们写一个范例来加深印象

webapp/life_cycle.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<html>
<head>
<title>life.jsp</title>
</head>
<body>

<%! 
  private int initVar=0;
  private int serviceVar=0;
  private int destroyVar=0;
%>

<%!
  public void jspInit(){
    initVar++;
    System.out.println("jspInit(): JSP被初始化了"+initVar+"次");
  }
  public void jspDestroy(){
    destroyVar++;
    System.out.println("jspDestroy(): JSP被销毁了"+destroyVar+"次");
  }
%>

<%
  serviceVar++;
  System.out.println("_jspService(): JSP共响应了"+serviceVar+"次请求");

  String content1="初始化次数 : "+initVar;
  String content2="响应客户请求次数 : "+serviceVar;
  String content3="销毁次数 : "+destroyVar;
%>
<h1>简单编程 JSP 测试实例</h1>
<p><%=content1 %></p>
<p><%=content2 %></p>
<p><%=content3 %></p>

</body>
</html>

在浏览器上输入 http://localhost:8080/jsp/life_cycle.jsp 显示结果如下

每刷新一次,访问次数就会增长 1

JSP 基础教程

关于   |   FAQ   |   我们的愿景   |   广告投放   |  博客

  简单教程,简单编程 - IT 入门首选站

Copyright © 2013-2018 简单教程 twle.cn All Rights Reserved.