您的位置:首页 > Web前端 > JavaScript

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()方法就行了,就像下面这样:

public void jspInit() {
//init code
}
通常,程序只初始化一次。
(3)JSP执行
这一阶段描述了JSP生命周期中一切与请求相关的交互行为,直到被销毁。
当JSP页面完成初始化后,调用jspService()方法执行。
(4)JSP清理
JSP生命周期的销毁阶段描述了当一个JSP网页从容器中被移除时所发生的一切。

jspDestroy()方法在JSP中等价于servlet中的销毁方法。当您需要执行任何清理工作时复写jspDestroy()方法,比如释放数据库连接或者关闭文件夹等等。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: