Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1530980
  • 博文数量: 3500
  • 博客积分: 6000
  • 博客等级: 准将
  • 技术积分: 43870
  • 用 户 组: 普通用户
  • 注册时间: 2008-05-03 20:31
文章分类

全部博文(3500)

文章存档

2008年(3500)

我的朋友

分类:

2008-05-04 20:17:51

一起学习

在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服务器 ()包含了一个 JSP编译器(JSPC),可以进行预编译,既可以定义一个web应用的文件目录,也可以指定某个特定jsp文件来进行编译。
另外,oracle也有jspc。
下载本文示例代码


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

阅读(80) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~