环境
- Eclipse Java EE IDE for Web Developers.
Version: Neon.1a Release (4.6.1) - Apache Tomcat version: 8.0.39
开始
整体过程感受:
当我们请求WEB容器中的JSP页面时,WEB容器便将被访问的页面交给JSP引擎去处理。Tomcat中的JSP引擎就是一个Servlet程序,它负责解释和执行JSP页面。
每个JSP页面在第一次被访问时,JSP引擎先将它翻译成一个Servlet源程序,接着再把这个Servlet源程序编译成Servlet的class类文件,然后再由WEB容器像调用普通Servlet程序一样的方式来装载和解释执行这个由JSP页面翻译成的Servlet程序。
由于每台服务器的环境不同,具体的由Tomcat中的JSP引擎转译的源码地址也就不一样。在我本机的环境中,我可以通过查看控制台的相关提示,就可以快速找到与我项目中jsp文件对应的java文件和class文件。示例图如下。(当然如果你实在想了很多办法也没能找到jsp转译的相关文件位置,那就用最笨的方法,来个具体盘搜索,或者直接来个全盘搜索,搜索格式为:jsp文件名+_jsp+.java)
JSP的具体执行过程如下:
- 客户端发出请求。
- Web容器将JSP转译成Servlet源代码。
- Web容器将产生的源代码进行编译。
- 把执行结果响应至客户端。
总结如下:
JSP执行过程:
- 首先,客户端发出请求(request ),请求访问JSP网页
- 接着,JSP Container将要访问的.JSP文件 转译成Servlet的源代码(.java文件)
- 然后,将产生的Servlet的源代码(.java文件)经过编译,生成.class文件,并加载到内存执行
- 最后把结果响应(response )给客户端
补充:执行JSP网页文件时,需要经过两个时期:转译时期(TranslationTime)和请求时期(RequestTime)。
转译时期:JSP转译成Servlet类(.class文件)。
- 将JSP网页转译为Servlet源代码(.java),此段称为转译时期(Translation time);将JSP网页转译为Servlet源代码(.java),此段称为转译时期(Translation time);
- 将Servlet源代码(.java)编译成Servlet类(.class),此阶段称为编译时期(Compilation time)。
其实,JSP就是一个Servlet。
请求时期:Servlet类(.class文件)执行后,响应结果至客户端。