一个JSP执行过程

执行过程图解

一个JSP执行过程

具体的代码:

1.jsp
一个JSP执行过程
一个JSP执行过程

注意几点:

1.当客户端向一个JSP页面发出请求时,Web Container(web容器,一般是Tomcatt)将JSP转化成Servlet的源代码(只在第一次请求时),然后编译转化后的Servlet并加载到内存中执行,执行的结果Response到客户端。
2.JSP只在第一次执行的时候会转化为Servlet,以后每次执行Web容器都是直接执行编译后的Servlet,所以JSP和Servlet只是在第一次执行的时候不一样,JSP慢一点,以后的执行都是相同的。
**3.**如果你修改了jsp文件中的代码,是需要重新启动服务器,加载编译jsp代码的。因为一旦修改,相当于重新写了一个jsp一样。

查看硬盘中1.jsp页面加载执行过后生成的servlet的java文件,以及对应的.class文件

IDEA并没有将jsp生成的相关文件放在Tomcat容器中,而是CATALINA_BASE中。当你启动服务器就会在控制台中看到这个目录。一个JSP执行过程

1.jsp页面,执行从被客户端请求,到生成.java (servlet)文件的和class(文件),最后响应给客户端的全过程如下:

一个JSP执行过程
修改1.jsp内容,重新启动服务器,查看是否重新生成了相关java和class的文件
一个JSP执行过程

重新生成了java和class的文件的执行全过程如下:

观察最后文件生成的时间,就知道修改jsp文件,确实会重新生成了相关java和class文件一个JSP执行过程

查看1.jsp被Tomcat容器生成的_1_jsp.java的内容,确定其是一个servlet。

它具有一个servlet的生命周期的init,destroy,以及service方法。
关于servlet的生命周期可参考这篇博文:servlet的生命周期
而且直接读取1.jsp里面的内容通过输出语句out.write输出到了浏览器上。
一个JSP执行过程

补充内容:

1.eclipse默认将发布到服务器上的项目放在work目录下:
下面中的文件分别是add.jsp,edit.jsp,index.jsp,list.jsp对应的.class和.java文件。(stums是项目名,org是指非盈利组织,是顶级域名中的一种,apache是阿帕奇公司)
一个JSP执行过程
2.看的仔细的同学,可能会注意为什么上面的1.jsp得到的java(servlet)和class(字节码)文件的文件名形式和add.jsp等不一样。
1.jsp是以"_“开头,生成的java文件名为”_1_jsp.java",对应的字节码文件名为"_1_jsp.class"。
add.jsp是其文件名"add"开头,生成的java文件名为"add_jsp.java",对应的字节码文件名为"add_jsp.class"。

这样看来jsp生成的Java和class文件名称的格式好像有两种标准一样,其实不然,标准只有一种
这里总结一下:jsp生成的java和class文件名称是以第二种add.jsp这种形式来生成对应的java和class文件的。
如果jsp文件名为Demo1.jsp,那么得到的servlet形式的java文件名称为Demo1_jsp.java和Demo1_jsp.class
一个JSP执行过程
那为什么1.jsp文件中生成的java文件会以"_"开头呢?而不是 1_jsp.java和1_jsp.class这种形式呢?
因为这涉及到了一个Java入门的基础知识 标识符的命名

标识符的命名

Java中的标识符由文本字符(包括字母,中文等),数字,下划线(_),美元符号($)组成,并且首字符不能是数字,不能包含任何嵌入的空格或点".",以及除下划线以外的特殊字符。