JSP的结构和生命周期
2016-02-05 12:28
656 查看
1.JSP的结构
网络服务器需要一个JSP引擎,也就是一个容器来处理JSP页面。容器负责截获对JSP页面的请求。JSP容器和Web服务器协同合作,为JSP的正常运行提供必要的运行环境和其它服务,并且能够正确识别专属于JSP网页的特殊元素。
下图显示了JSP容器和JSP文件在Web应用中所处的位置:
2.JSP处理
Web服务器是通过如下步骤使用JSP来创建网页的:
客户浏览器给服务器发送一个HTTP请求;
Web服务器识别出这是一个JSP网页的请求,并且将该请求传递给JSP引擎。通过使用URL或.jsp文件来完成;
JSP引擎从磁盘中载入JSP文件,然后将它们转化为servlet。这种转化只是简单地将所有模板文本改用println()语句,并且将所有的JSP元素转化成Java代码;
JSP引擎将servlet编译成可执行类,并且将原始请求传递给servlet引擎;
Web服务器的某组件将会调用servlet引擎,然后载入并执行servlet类。在执行的过程中,servlet产生HTML格式的输出并将其内嵌与HTTP的response上交给Web服务器;
Web服务器以静态HTML网页的形式将HTTP的response返回给浏览器;
最终,Web浏览器处理HTTP response中动态产生的HTML网页,就好像在处理静态网页一样;
流程如下图:
一般情况下,JSP引擎会检查JSP文件对应的servlet是否已经存在,并且检查JSP文件的修改日期是否早于servlet。如果JSP文件的修改时间早于对应的servlet,那么容器就可以确定JSP文件没有被修改过并且servlet有效。 这使得整个流程与其他脚本语言相比要高效快捷一些。
3.JSP的生命周期
理解JSP的生命周期是理解JSP底层功能的关键。
JSP的生命周期包括以下几个阶段:
编译阶段:servlet容器编译servlet源文件,生成servlet类;
初始化阶段:加载与JSP对应的servlet类,创建其实例,并调用它的初始化方法;
执行阶段:调用与JSP对应的servlet实例的服务方法;
销毁阶段:调用与JSP对应的servlet实例的销毁方法,然后销毁servlet实例;
生命周期如下图所示:
(1)JSP编译
当浏览器发起请求时,JSP引擎将编译JSP文件。流程如下图:
有三个步骤:
解析JSP文件;
将JSP文件转化为servlet;
编译servlet;
这里,首先判断是不是第一次请求,如果是的话,也就是说JSP还没有被编译过,JSP引擎就把相应的JSP文件编译成servlet,生成字节码文件,并调用jspInit();如果不是第一次请求,说明已经有了字节码文件,那么就开始解析执行,调用jspServive()。
jspService()方法被调用来处理客户端的请求,对于每一个请求,JSP引擎将创建一个新的线程来处理请求。如果有多个客户端同时请求JSP文件,则JSP引擎将会创建多个线程,每个客户端对应一个线程。同时,servlet始终存在内存中,因此相应很快。
(2)JSP初始化
容器载入JSP文件后,它会在为请求提供任何服务前调用jspInit()方法。如果需要执行自定义的JSP初始化任务,复写jspInit()方法就行了,就像下面这样:
(3)JSP执行
这一阶段描述了JSP生命周期中一切与请求相关的交互行为,直到被销毁。
当JSP页面完成初始化后,调用jspService()方法执行。
(4)JSP清理
JSP生命周期的销毁阶段描述了当一个JSP网页从容器中被移除时所发生的一切。
jspDestroy()方法在JSP中等价于servlet中的销毁方法。当您需要执行任何清理工作时复写jspDestroy()方法,比如释放数据库连接或者关闭文件夹等等。
网络服务器需要一个JSP引擎,也就是一个容器来处理JSP页面。容器负责截获对JSP页面的请求。JSP容器和Web服务器协同合作,为JSP的正常运行提供必要的运行环境和其它服务,并且能够正确识别专属于JSP网页的特殊元素。
下图显示了JSP容器和JSP文件在Web应用中所处的位置:
2.JSP处理
Web服务器是通过如下步骤使用JSP来创建网页的:
客户浏览器给服务器发送一个HTTP请求;
Web服务器识别出这是一个JSP网页的请求,并且将该请求传递给JSP引擎。通过使用URL或.jsp文件来完成;
JSP引擎从磁盘中载入JSP文件,然后将它们转化为servlet。这种转化只是简单地将所有模板文本改用println()语句,并且将所有的JSP元素转化成Java代码;
JSP引擎将servlet编译成可执行类,并且将原始请求传递给servlet引擎;
Web服务器的某组件将会调用servlet引擎,然后载入并执行servlet类。在执行的过程中,servlet产生HTML格式的输出并将其内嵌与HTTP的response上交给Web服务器;
Web服务器以静态HTML网页的形式将HTTP的response返回给浏览器;
最终,Web浏览器处理HTTP response中动态产生的HTML网页,就好像在处理静态网页一样;
流程如下图:
一般情况下,JSP引擎会检查JSP文件对应的servlet是否已经存在,并且检查JSP文件的修改日期是否早于servlet。如果JSP文件的修改时间早于对应的servlet,那么容器就可以确定JSP文件没有被修改过并且servlet有效。 这使得整个流程与其他脚本语言相比要高效快捷一些。
3.JSP的生命周期
理解JSP的生命周期是理解JSP底层功能的关键。
JSP的生命周期包括以下几个阶段:
编译阶段:servlet容器编译servlet源文件,生成servlet类;
初始化阶段:加载与JSP对应的servlet类,创建其实例,并调用它的初始化方法;
执行阶段:调用与JSP对应的servlet实例的服务方法;
销毁阶段:调用与JSP对应的servlet实例的销毁方法,然后销毁servlet实例;
生命周期如下图所示:
(1)JSP编译
当浏览器发起请求时,JSP引擎将编译JSP文件。流程如下图:
有三个步骤:
解析JSP文件;
将JSP文件转化为servlet;
编译servlet;
这里,首先判断是不是第一次请求,如果是的话,也就是说JSP还没有被编译过,JSP引擎就把相应的JSP文件编译成servlet,生成字节码文件,并调用jspInit();如果不是第一次请求,说明已经有了字节码文件,那么就开始解析执行,调用jspServive()。
jspService()方法被调用来处理客户端的请求,对于每一个请求,JSP引擎将创建一个新的线程来处理请求。如果有多个客户端同时请求JSP文件,则JSP引擎将会创建多个线程,每个客户端对应一个线程。同时,servlet始终存在内存中,因此相应很快。
(2)JSP初始化
容器载入JSP文件后,它会在为请求提供任何服务前调用jspInit()方法。如果需要执行自定义的JSP初始化任务,复写jspInit()方法就行了,就像下面这样:
public void jspInit() { //init code }通常,程序只初始化一次。
(3)JSP执行
这一阶段描述了JSP生命周期中一切与请求相关的交互行为,直到被销毁。
当JSP页面完成初始化后,调用jspService()方法执行。
(4)JSP清理
JSP生命周期的销毁阶段描述了当一个JSP网页从容器中被移除时所发生的一切。
jspDestroy()方法在JSP中等价于servlet中的销毁方法。当您需要执行任何清理工作时复写jspDestroy()方法,比如释放数据库连接或者关闭文件夹等等。
相关文章推荐
- ES7中的async函数
- JS通过Cookie判断页面是否为首次打开
- (转)json+flexgrid+jbox组合运用页面刷新<jsp>
- bzoj 1027 [JSOI2007]合金(计算几何+floyd最小环)
- JavaScript判断图片是否已经加载完毕的方法汇总
- use strict(javascript严格模式)
- jsp与servlet之间的参数传递【转】
- 系统设计以及javascript笔记:用户行为分析研究之数据采集
- js判断图片是否已经加载(下载)完
- JSP中out.write()和out.print()的区别
- HTML/CSS/Javascript代码在线压缩、格式化(美化)工具
- Jsp过滤器Filter配置过滤类型汇总
- jsp的页面包含——静态包含、动态包含
- JSON 之GSON 解析
- html中导入.css 和 javascript
- JSON 之FastJson解析
- JavaScript核心
- jsp:forward page=
- zepto.js 源码注释备份
- JSP页面乱码问题