您的位置:首页 > 运维架构 > Tomcat

tomcat如何处理jsp

2012-08-07 00:53 246 查看
Tomcat怎么处理JSP页面
所有扩展名为jsp的URL都会交由JSPServlet类处理,也就是交由Servlet引擎进行处理。而未定义的其他扩展名的URL所指的Web资源就直接由Tomcat按原样返回给客户端(实际上,也是通过Tomcat自带的一个DefaultServlet类来处理的)。如果不将html映射成JSP的扩展名,那么扩展名为html的URL就会被交给DefaultSerlvlet类来处理。因此,html也就变成了静态的Web资源了。
JSP引擎分两步JSP页面进行处理。首先将JSP页面生成一个Servlet源程序文件,然后再调用java编译器将这个Servlet源程序文件编译成.class文件,并由Servlet引擎来装载并执行这个.class文件。如果在IE地址栏中输入如下的URL,servertime.jsp页面就会生成两个文件:servertime_jsp.java和servertime_jsp.class。
为了提高JSP的执行效率,并不是每次访问JSP时都进行翻译。只有在第一次访问JSP页面时才会执行这个翻译过程。当再次访问这个JSP页面时,Servlet引擎会将茶JSP页面是否被更新,如果已经被更新,会再次翻译这个JSP页面,然后执行它。如果未被更新,Servlet引擎会直接装载并执行由这个SJP页面翻译生成的.class文件。、
也就是说,JSP页面只有在第一次被访问时才被翻译成.class文件,对于该JSP页面的后续访问,除非这个JSP页面被修改,否则Web容器将直接调用被翻译好的.class文件。因此,JSP页面从运行原理上看就是在运行Servlet程序。所以习惯上将同时执行JSP和Servlet的程序成为Servlet容器,而不是分别叫JSP容器和Servlet容器。
由于JSP在第一次访问是要经过JSP引擎翻译成Servlet才能运行。因此,在第一次访问JSP页面是比较慢。在Tomcat的文档中提供了一种通过ant将JSP页面翻译成.class文件再发布的方法,通过这种方法就可以有效地解决这个问题。
l JSP生成Servlet代码
1. 所有的JSP页面生成的Servlet类的类名由JSP文件名加上“_jsp”组成,如果random_jsp。
2. JSP静态部分的转换
JSP的静态部分就是在客户端运行的代码,如:HTML,JavaScript等。在random.jsp中除了用<%...%>括起来的内容 (包括<%=…%>和<@page…%>)外,其他的部分都属于静态部分,这个静态的内容在转换时都作为字符串,并通过write方法按原样输出到客户端。
3. JSP动态部分的转换
i. <%...%>形式:JSP引擎如果遇到这种形式,就将<%...%>中的内容按原样插入由JSP生成的Servlet源代码中。
ii. <=%...%>形式:JSP引擎遇到这种形式,并不是把其中的内容直接放到Serclet源程序中,而是通过print方法将”=”后面的内容 输出到客户端。
iii. JSP指令:%@page...%就是一个JSP的page指令。对于这中形式,JSP引擎按照指令类型和它的属性翻译成相应的Java代码

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: