JSP的工作模式是请求/响应模式。客户端首先发出HTTP请求。JSP程序收到请求后将进行处理并返回处理结果。在一个JSP文件第一次被请求的时候。JSP引擎(容器)把该JSP文件转换成一个Servlet。而这个引擎本身也是一个Servlet。JSP的运行原理如图11-4所示。
图11-4 JSP的运行原理
JSP的运行过程具体如下。
(1)客户端发出请求。请求访问JSP文件。
(2)JSP容器先将JSP文件转换成一个Java源文件(Java Servlet源程序)。在转换过程中。如果发现JSP文件中存在任何语法错误。则中断转换过程。并向服务端和客户端返回出错信息。
(3)如果转换成功。则JSP容器会将生成的Java源文件编译成相应的字节码文件*.class。该class文件就是一个Servlet。Servlet容器会像处理其他Servlet一样处理它。
(4)由Servlet容器加载转换后的Servlet类(class文件)创建一个该Servlet(JSP页面的转换结果)的实例。并执行Servlet的jspInit()方法。jsInit()方法在Servlet的整个生命周期中只会执行一次。
(5)执行jspService()方法处理客户端的请求。对于每一个请求。JSP容器都会创建一个新的线程处理它。如果多个客户端同时请求该JSP文件。则JSP容器会创建多个线程。使每一个客户端请求都对应一个线程。
(6)如果JSP文件被修改了。则服务器将根据设置决定是否对该文件重新进行编译。如果需要重新编译。则使用重新编译后的结果取代内存中的Servlet。并继续上述处理过程。需要注意的是。虽然JSP效率很高。但在第一次调用时往往由于需要转换和编译。所以会产生一些轻微的延迟。
(7)如果系统出现资源不足等问题。JSP容器可能会以某种不确定的方式将Servlet从内存中移除。发生这种情况的时候。首先会调用jspDestroy()方法。然后Servlet实例会被作为“垃圾”进行处理。
(8)当请求处理完成后。响应对象由JSP容器接收。并将HTML格式的响应信息发送回客户端。