JSP指的是Java Server Pages。
首先需要明确的是:当一个JSP文件第一次被请求时, JSP容器会先把该JSP文件转换成一个Servlet.
JSP的运行过程为:
(1) JSP容器先将该JSP文件转换成一 个Java源文件(Java Servlet源程序),在转换过程中如果发现JSP文件中存在任何语法错误,则中断转换过程,并向服务端和客户端返回出错信息。
(2)如果转换成功,则JSP容器使用javac将生成的Java源文件编译成相应的字节码文件*.class。该,class 文件就是个 Servlet, Servlet容器会像处理其他的Servlet样来处理它。
(3)由Servlet容器加载转换后的Servlet类(.class 文件),创建一个该 Servlet (JSP页面的转换结果)的实例,并执行Servlet的jspInitO万法,jspmit()方法在Senler的整个生命周期中只会被执行一次。
(4)执行_ jspService0方法来处理客户端的请求。对于每一个请求, JSP容器都会创建一个新的线程来处理它。如果有多个客户端同时请求该JSP文件,则JSP容器也会创建多个线程,使得每个客户端请求都对应个线程。 JSP 运行过程中采用的这种多线程的执行方式可以极大地降低对系统资源的需求,提高系统的开发量和响应时间。要注意的是,第(3)步中生成的Servlet是常驻内存的,所以响应速度也是非常快的。
(5)如果.jsp文件被修改了,则服务器将根据设置决定是否对该文件重新编译,如果需要重新编译,则使用重新编译后的结果取代内存中常驻的Servlet, 并继续上述处理过程。
(6)虽然JSP效率很高,但在第一次调用时往往由于需要转换和编译过程而产生一些圣微的延迟。此外, 由于系统资源不足等原因,JSP 容器会以某种不确定的方式将Servlet内存中移去。当这种情况发生时会首先调用jspDestroy0方法。