在JSP编译的时候,服务器内部做了什么?

ZDNet软件频道 时间:2001-08-14 作者: |  我要评论()
本文关键词:JSP
在JSP编译的时候,服务器内部做了什么?
转载自Java开发者

JSP第一次获得请求时,不管请求来自于客户端浏览器还是服务器上的servlet, JSP文件将被JSP引擎(JSP engine)转换成为一个servlet。而这个引擎本身也是一个servlet,在JSWDK,它就是 JSPServlet。

在编译时候如果发现JSP文件有任何语法错误,转换过程将中断,并向客户端发出出错信息;而如果编译成功了,则所转换产生的servlet代码被编译,然后该servlet被JSP引擎加载到内存中。此时JSP引擎还请求了JSPInit()方法的执行,并对此servlet做初始化。JSPInit()方法在servlet的生命周期中只被请求一次。然后JSPService()方法被调用来处理客户端的请求和回复操作。对于所有的随后而来的对该JSP文件的请求,服务器将检查该.JSP文件自最后一次被存取后是否经过修改。如果没有修改则请求将交给还在内存中的servlet的JSPService()方法以一种同时发生的方式加以处理。注意,由于 servlet始终驻于内存,所以响应是非常快的。
如果.JSP文件被修改了,服务器将自动地对文件重新编译,并将结果取代内存中的servlet,并继续上述处理过程。


虽然JSP效率很高,但在第一次调用时由于需要转换和编译而有一些轻微的延迟。 此外,如果在任何时候如果由于系统资源不足的原因,JSP引擎将以某种不确定的方式将servlet从内存中移去。当这种情况发生时JSPDestroy()方法首先被调用, 然后servlet实例便被标记加入“垃圾收集”处理。



JSP编译原理
JSP文件的Scriptlets在编译后将被包含于该JSP servlet的service()方法。当JSP引擎处理客户端请求时,JSP Scriptlets在被请求的时候被执行。如果scriptlet产生输出,输出将在out (JSPWriter)对象中进行缓存然后最终发送到客户端。


.JSP由一个Servlet"解释"执行
这个Servlet就是/servlet/org.git.JSP.JSPServlet(假如你把它放在servlet这个区域里)
第一次访问JSP文件的时候这个servlet会把.JSP编译成另一个servlet, 然后以后每次访问这个JSP的时候就直接调用那个servlet了.


JSP预编译器:
Jakarata Tomcat3.1 JSP服务器 (http://jakarta.apache.org)包含了一个 JSP编译器(JSPC),可以进行预编译,既可以定义一个web应用的文件目录,也可以指定某个特定JSP文件来进行编译。
另外,oracle也有JSPc。

 


百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134