JSP 生命周期

理解JSP底层功能的关键就是去理解它们所遵守的生命周期。

JSP生命周期就是从创建到销毁的整个过程,类似于servlet生命周期,区别在于JSP生命周期还包括将JSP文件编译成servlet。

以下是JSP生命周期中所走过的几个阶段:

  • 编译阶段:

    servlet容器编译servlet源文件,生成servlet类

  • 初始化阶段:

    加载与JSP对应的servlet类,创建其实例,并调用它的初始化方法

  • 执行阶段:

    调用与JSP对应的servlet实例的服务方法

  • 销毁阶段:

    调用与JSP对应的servlet实例的销毁方法,然后销毁servlet实例

很明显,JSP生命周期的四个主要阶段和servlet生命周期非常相似,下面给出图示:


JSP编译

当浏览器请求JSP页面时,JSP引擎会首先去检查是否需要编译这个文件。如果这个文件没有被编译过,或者在上次编译后被更改过,则编译这个JSP文件。

编译的过程包括三个步骤:

  • 解析JSP文件。
  • 将JSP文件转为servlet。
  • 编译servlet。

JSP初始化

容器载入JSP文件后,它会在为请求提供任何服务前调用jspInit()方法。如果您需要执行自定义的JSP初始化任务,复写jspInit()方法就行了,就像下面这样:

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

一般来讲程序只初始化一次,servlet也是如此。通常情况下您可以在jspInit()方法中初始化数据库连接、打开文件和创建查询表。


JSP执行

这一阶段描述了JSP生命周期中一切与请求相关的交互行为,直到被销毁。

当JSP网页完成初始化后,JSP引擎将会调用_jspService()方法。

_jspService()方法需要一个HttpServletRequest对象和一个HttpServletResponse对象作为它的参数,就像下面这样:

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

_jspService()方法在每个request中被调用一次并且负责产生与之相对应的response,并且它还负责产生所有7个HTTP方法的回应,比如GET、POST、DELETE等等。


JSP清理

JSP生命周期的销毁阶段描述了当一个JSP网页从容器中被移除时所发生的一切。

jspDestroy()方法在JSP中等价于servlet中的销毁方法。当您需要执行任何清理工作时复写jspDestroy()方法,比如释放数据库连接或者关闭文件夹等等。

jspDestroy()方法的格式如下:

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

实例

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>

jsp处理的生命周期相关推荐

  1. 观看慕课老师milanlover视频JSP页面生命周期+分别通过脚本和表达式实现九九乘法表

    但是多线程要注意临界资源的共享和保护问题. workplace地址: work地址: 新建项目: 插播一条编译错误: .java:说明有jsp编译生成的字节码文件. 大体上jsp页面的生命周期:Ini ...

  2. JavaWeb(十)——jetty服务器、创建jsp项目、servlet生命周期及url的匹配规则

    文章目录 1. jetty服务器的下载与安装 1.1 jetty简介 1.2 jetty的下载与安装 2. idea创建jsp项目 3. idea给jsp项目导入jar包 4. 编写第一个servle ...

  3. jsp学习(1)jsp请求过程和生命周期

    一.服务器处理jsp请求的过程: 以下步骤表明了 Web 服务器是如何使用JSP来创建网页的: 1.浏览器发送一个 HTTP 请求给服务器. 2.Web 服务器识别出这是一个对 JSP 网页的请求,并 ...

  4. JSP的生命周期研究

    先看个简单的jsp例子: <%@ page language="java" contentType="text/html; charset=UTF-8"p ...

  5. JSP的结构和生命周期

    1.JSP的结构 网络服务器需要一个JSP引擎,也就是一个容器来处理JSP页面.容器负责截获对JSP页面的请求.JSP容器和Web服务器协同合作,为JSP的正常运行提供必要的运行环境和其它服务,并且能 ...

  6. 19.jsp生命周期

    JSP 生命周期 理解JSP底层功能的关键就是去理解它们所遵守的生命周期. JSP生命周期就是从创建到销毁的整个过程,类似于servlet生命周期,区别在于JSP生命周期还包括将JSP文件编译成ser ...

  7. 小汤学编程之JavaEE学习day03——JSP组成结构、JSP原理、JSP生命周期、JSP九大内置对象、四大作用域、JSP的MVC模式

    一.JSP组成结构 二.JSP的原理 1.JSP的运行原理     2.分析JSP所生成的Servlet代码     3.JSP的执行过程 三.JSP生命周期 四.JSP九大内置对象 五.JSP四大作 ...

  8. 【JavaLearn】#(23)JSP相关语法、HTTP协议、Servlet介绍、Servlet生命周期、请求和响应、相对路径、转发和重定向

    1. JSP简单内容 1.1 JavaEE JavaEE 包含JSP JavaEE是一个开发分布式企业级应用的规范和标准.JavaEE包含之前学过的所有内容(JavaSE) 真正开发中,很少使用Jav ...

  9. Java Web复习——task03:JSP 内置对象和生命周期

    文章目录 前言 一.JSP内置对象 1.1 HttpServletRequest类和Request对象 1.2 HttpServletResponse类和Response对象 1.3 JspWrite ...

最新文章

  1. 如何避免在Excel VBA中使用选择
  2. mysql 分区表 归档_MySQL分区表
  3. 电子科大计算机大类包括专业,电子科技大学a类学科有哪些?附电子科大a类学科名单...
  4. 成为大厂AI算法工程师,“NLP/CV”都是你必须过的坎!
  5. Item9:总是要改写toString
  6. C++的int初始化
  7. 广州市城市智能交通大数据体系研究与实践
  8. android用户登录volley,如何在Android上使用Volley进行基本身份验证?
  9. DbEntry 访问Access2010数据库
  10. python pyqt5教程pdf_PyQt5中文手册
  11. 第五代移动通信——5G
  12. 什么软件可以更换手机ip地址
  13. gtid_executed和gtid_purged变量是如何初始化的
  14. CS代理+proxychains+nmap进行内网扫描
  15. Line推出新语音群聊功能 最多支持200人
  16. 中山大学新华学院计算机,中山大学新华学院信息科学学院电子信息科学与技术、计算机科学与技术、软件...
  17. 修改本地Git用户名、密码
  18. LwIP常见问题FAQ
  19. 2020,上市也疯狂
  20. ruoyi自定义工作流(前端二,添加流程管理页面)

热门文章

  1. 网络与信息安全工程师职位要求
  2. 64注意力机制 10章
  3. 【基础篇】Linux的目录结构
  4. Python matplotlib 中填充颜色
  5. uniapp实现点击播放mp3音频文件
  6. ORACLE函数库大全
  7. 欧拉公式推导(e^iπ+1=0)
  8. java.lang.IllegalArgumentException: Name for argument type [java.lang.Integer] not available异常
  9. Selenium使用浏览器自动登录校园网
  10. VS2012创建C++项目失败,解决方法