先看个简单的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>w3cschool教程 JSP 测试实例</h1>
<p><%=content1 %></p>
<p><%=content2 %></p>
<p><%=content3 %></p></body>
</html>

浏览器打开该jsp,每F5刷新一次页面,发现复写的jspInit始终只被调用了一次,而serviceVar计数器每次刷新会加一。


关于jsp的生命周期,可以参考w3c的教程:
https://www.w3cschool.cn/jsp/jsp-life-cycle.html

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()
{// 清理代码
}

要获取更多Jerry的原创文章,请关注公众号"汪子熙":

JSP的生命周期研究相关推荐

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

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

  2. Apple Watch学习之路 生命周期研究

    无论是Apple app或者Apple Watch app 掌握整个应用的生命周期尤为重要. 下图是watch app整个生命周期图 watchOS生命周期中在代码中是怎么实现的呢? 当用户在Home ...

  3. 2021移动游戏生命周期研究玩家洞察报告

    更多报告内容,可加微信:yw5201a1 领取.(ps:加过微信:chanpin628 的不要再加,分享的内容一样,有一个号就行.)

  4. JSP的结构和生命周期

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

  5. 日志不说谎--Asp.net的生命周期

    为了学习Asp.net的生命周期,我做了两个试验,记录下了日志,大家先看日志,我有问题: 试验1:页面上有一个ClientCallBack的功能:下面记录的是页面载入之后点击按钮执行ClientCal ...

  6. 001jsp的基本知识-包括生命周期,怎么编译等等

    4 Jsp基础 4.1 Jsp引入 Servlet的作用: 用java语言开发动态资源的技术!!! Jsp的作用:用java语言(+html语言)开发动态资源的技术!!! Jsp就是servlet!! ...

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

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

  8. Android apk动态加载机制的研究(二):资源加载和activity生命周期管理

    转载请注明出处:http://blog.csdn.net/singwhatiwanna/article/details/23387079 (来自singwhatiwanna的csdn博客) 前言 为了 ...

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

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

最新文章

  1. ORB-SLAM2从理论到代码实现(八):Tracking.cc程序详解(下)
  2. js基础---object对象
  3. 2017光棍节新生训练赛
  4. 25、Power Query-日期与时间数据处理
  5. 无线传感器在智能家居中的应用
  6. MATLAB FOR PROE
  7. 在 SELECT 查询中使用透视
  8. html 悬停显示标题,JS实现TITLE悬停长久显示效果完整示例
  9. JQuery时间轴timeline插件的学习-Lateral On-Scroll Sliding with jQuery+technotarek / timeliner
  10. 阿里巴巴如何基于 Kubernetes 实践 CI/CD
  11. android阴影edittext,android – 将阴影效果添加到EditText字段
  12. NB-IoT在无线烟感监控系统中的优势
  13. HTML颜色代码大全
  14. nobody cared (try booting with the irqpoll option)笔记调试全记录
  15. HTML网页设计作业个性潮流服装商城模板
  16. wszystkie hoopery Buty Adidas Crazy BYW sklep
  17. SystemVerilog学习-10-验证量化和覆盖率
  18. 三极管与场效应管的区别与联系
  19. Matlab外部程序接口
  20. js return加分号_JavaScript语句后应该加分号么?

热门文章

  1. 使用递归方法遍历TreeView的节点如配置则勾选
  2. 7_15_2013 E: 机器人II
  3. 批量部署虚拟机实战解析
  4. WinAPI: midiOutCachePatches - 预装音色
  5. Unity Shader 序列帧动画
  6. Link-Cut Tree指针模板
  7. 文件重定向函数freopen
  8. usaco3.33Camelot(BFS)
  9. 28个经过重新设计的著名博客案例
  10. J2EE搭建Dynamic web SpringMVC工程404错误分析(二)