Tomcat是如何处理jsp页面的

JSP(JAVA SERVER PAGE)的缩写,其本身就是servlet的简化,是一种动态网页标准,其特点是在HTML代码中嵌入JAVA代码,JSP标签或用户标签来生成网页。至于它为什么会出现,主要原因在于早期的servlet技术在编写代码时经常通篇性的写一大堆HTML标签,静态文本及文本格式等表现逻辑,其开发效率非常之低下;为了解决这种情况,便随之出现了JSP,其静态部分(包括表现逻辑,如图片,文字等等)全用HTML语言来编写,只有需要动态生成的逻辑才由嵌入的JAVA代码来实现。

    说到最后,JSP其实还是一种对servlet的简化语言,所有的JSP页面最终都会被servlet容器编译成servlet类(其实就是java类),而至于什么是servlet容器,再说吧。。。


所有扩展名为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代码。

你可能感兴趣的:(java,jsp)