长生的梦呓


  • 归档
  • 算法
  • 基础
  • 关于

  • 分类
  • 日志
  • Servlet
  • Archive
  • 数据结构
  • IO 流

  • 标签
  • 友链
  • MyBatis
  • About
  • Spring 5
  • Java SE
  • Java EE
  • Algorithms
  • 新特性
  • 位运算技巧

  • 搜索
内网穿透 项目实战 数据库 MySQL 安卓踩坑 开发工具 设计模式 Enum 枚举 Linux MyBatis-plus JSON IDEA Transactions AOP IO 流 DP IoC 与 DI 位运算技巧 工具类 学习技巧 Git JDK 排序 Spring Boot Spring MVC Spring Framework MyBatis Log4J Regex Jsoup JDBC 数据结构 递推 递归 算法 Servlet与JSP 小难 中等 简单

(17)JSP生命周期

发表于 2020-03-31 | 1 | 阅读次数 295

前言

在上一篇文章 Java EE基础(16):JSP概念 + 简单使用 中,我们知道了JSP本质也是一个Servlet。

这篇文章讲讲JSP的生命周期。这篇文章可以让你更好的理解JSP。还是使用我的上一篇文章中的案例。

一、JSP生命周期

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

一共是四个阶段:

  • 编译阶段
  • 初始化阶段
  • 执行阶段
  • 销毁阶段

JSP 的生命周期四个阶段和Servlet的生命周期非常相似。这几个阶段会在下面逐个解释。

图示:

1.生命周期阶段

1.1 编译阶段

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

编译阶段一共有三个过程:

  • 解析JSP文件。
  • 将JSP文件转为servlet。(就是将JSP文件转成了一个Servlet(.java文件))
  • 编译servlet。(将Servlet(.java文件),编译成.class文件)

想查看.jsp生成的Servlet和编译后jsp文件,请点击我的上一篇文章Java EE基础(16):JSP概念 + 简单使用
查看:(三、JSP运行原理 中 2.如何查看编译后的jsp文件)。

1.2 初始化阶段

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

打开jsp文件转成的.java(servlet)文件,可以看到里面有 _jspInit() 方法,只不过方法里面没有写初始化代码。

  public void _jspInit() {
  }
1.3 执行阶段

这一阶段描述了JSP生命周期中一切与请求相关的交互行为,直到被销毁。
当JSP网页完成初始化后,JSP引擎将会调用_jspService()方法。
_jspService()方法需要一个HttpServletRequest对象和一个HttpServletResponse对象作为它的参数

继续查看jsp文件转成的.java(servlet)文件,可以看到里面有 _jspService() 方法。方法里面有上一次我们生成的代码,和一些其他的代码。现在解释一下。

.jsp文件转换成的.java文件,其实本质上还是使用servlet中字符拼接响应给浏览器的。
在这里插入图片描述

1.4 销毁阶段

JSP生命周期的销毁阶段描述了当一个JSP网页从容器中被移除时所发生的一切。
jspDestroy()方法在JSP中等价于servlet中的销毁方法。当您需要执行任何清理工作时复写jspDestroy()方法,比如释放数据库连接或者关闭文件夹等等。

继续看jsp文件转成的.java(servlet)文件,可以看到里面有 _jspDestroy() 方法,只不过方法里面也没有写代码。

  public void _jspDestroy() {
  }

最后

以上就是JSP生命周期的分享,使用的还是上一篇文章中的简单案例。

参考

菜鸟教程JSP:https://www.runoob.com/jsp/jsp-life-cycle.html

  • 本文作者: 长生的梦呓
  • 本文链接: https://shengjava.com/archives/17jsp生命周期
  • 版权声明: 本博客所有文章除特别声明外,均采用CC BY-NC-SA 3.0 许可协议。转载请注明出处!
# 内网穿透 # 项目实战 # 数据库 # MySQL # 安卓踩坑 # 开发工具 # 设计模式 # Enum # 枚举 # Linux # MyBatis-plus # JSON # IDEA # Transactions # AOP # IO 流 # DP # IoC 与 DI # 位运算技巧 # 工具类 # 学习技巧 # Git # JDK # 排序 # Spring Boot # Spring MVC # Spring Framework # MyBatis # Log4J # Regex # Jsoup # JDBC # 数据结构 # 递推 # 递归 # 算法 # Servlet与JSP # 小难 # 中等 # 简单
(16)JSP概念 + 简单使用 + 运行原理
(18)JSP语法 + JSP指令(3大指令) + JSP动作
  • 文章目录
  • 站点概览
长生的梦呓

长生的梦呓

110 日志
39 分类
40 标签
RSS
E-mail CSDN
Creative Commons
Links
  • CSDN 地址
  • waltz26
  • Ryan Wang's Blog
  • JohnNiang's Blog
  • 廖雪峰
  • 菜鸟教程
© 2021 长生的梦呓
浙ICP备20005262号-1