JSP

Author: Neo Date: Nov 20, 2018 Updated On: Nov 20, 2018
Categories:
Tags: java

JSP的基本概念

JSP属于Java平台的一部分,它是将Java代码嵌入HTML或者XML中的脚本语言,提供了在服务器端HTML或XML中混合Java程序代码,由语言引擎解释执行程序代码的能力。在JSP环境下,HTML代码主要负责描述Web页面的显示样式,而程序代码则用来描述如何处理逻辑。普通的HTML页面只依赖于Web服务器,而JSP页面需要附加的语言引擎来分析和执行程序代码。

JSP的运行原理

当Web服务器第一次获得客户端浏览器对某个JSP页的执行请求后,服务器通过JSP引擎(JSP Engine)先将JSP页面文件转换成纯Java代码,在转换时若发现JSP文件有任何语法错误,转换过程将中断,并向服务端和客户端输出错误信息。如果转换成功,JSP引擎就调用Java编译器将该文件转译成Servlet,即将该JSP文件编译成一个可以在服务器端运行Java Class文件。所有的JSP文件最终都将被编译成为Servlet。

Servlet编译成功后,JSP引擎会在服务器端创建一个该Servlet的实例并加载到内存中,同时jspInit()方法被执行以对此Servlet进行初始化。jspInit()方法在该Servlet的生命周期中只被执行一次,然后Servlet的jspService()方法被调用以处理客户端的请求。对每一个请求,JSP引擎创建一个新的线程来处理该请求。如果有多个客户端同时请求该JSP文件,则JSP引擎会创建多个线程。每个客户端请求对应一个线程,以多线程方式执行可大大降低对系统的资源需求,提高系统的并发量及响应时间。但应该注意多线程的编程限制,由于该Servlet始终驻于内存,所以响应是非常快的。

对于以后所有对该JSP文件的请求,JSP引擎将首先检查其自最后一次被存取后是否经过修改。如果没有被修改,则将请求交给还在内存中的jspService()方法响应请求;如果JSP文件被修改了,JSP引擎将自动对文件重新翻译、编译和装载,并用其结果取代内存中的相应的Servlet。

因为首次访问的时候要执行以上的一系列过程,所以会耗费一些时间,这就是所谓的“第一人惩罚”。但后续的请求响应将会非常迅速,因为服务器已经缓存了运行的Servlet,所以不需要再次编译。