关于JSP的工作原理
JSP实际上就是一种Servlet,但是与HttpServlet的工作方式不太一样。HttpServlet是先由源代码编译为class文件后部署到服务器下的,先编译后部署。而JSP则是先部署源代码后编译为class文件的,先部署后编译。JSP会在客户端第一次请求JSP文件时被编译为HttpJspPage类(接口Servlet的一个子类)。该类会被服务器临时存放在服务器工作目录里。
我们来看一下JSP的编译过程。客户第一次请求FirstJsp.jsp时,Tomcat先将FirstJsp.jsp转换为标准的Java源代码FirstJsp_jsp.java,存放在apache-tomcate-version\work\Catalina\localhost\jsp\org\apache\jsp目录下,并将FirstJsp_jsp.java编译为类文件FirstJsp_jsp.class。该class文件便是JSP对应的Servlet。编译完毕后再运行class文件来响应客户端请求。以后客户端访问FirstJsp.jsp时,服务器将不再重新编译文件,而是直接调用FirstJsp_jsp.class来响应客户端请求。
由于JSP只会在客户端第一次请求的时候被编译,因此第一次请求JSP时会感觉有点慢。而之后的请求因为不会编译JSP,所以速度就快多了。如果将Tomcat保存的JSP编译后的class文件删除,Tomcat也会重新编译JSP。
在实际项目中我们经常需要修改jsp文件。Tomcat能够自动检测到JSP程序的改动。如果检测到JSP源代码发生了改动,Tomcat会在下一次客户端请求JSP时重新编译JSP,而不需要重启Tomcat。这种自动检测功能是默认开启的,检测改动会消耗少量的时间。在部署Web应用程序的时候可以在web.xml中将它关掉。