jsp技术原理
jsp的工作方式是请求/应答模式,客户端发出HTTP请求,JSP程序收到请求后进行处理,并且返回处理的结果。在一个JSP文件发出请求时,JSP引擎把该JSP文件转换成为一个Servlet,而这个引擎本身也是一个Servlet。JSP的运行过程如下。
①JSP 引擎先把该 JSP 文件转换成一个 Java 源文件(Servlet), 在转换时, 如果发现 JSP文件有任何语法错误, 将中断转换过程, 并向服务器端和客户端输出出错信息。
②如果转换成功,JSP 引擎用javac 把该Java 源文件编译成相应的class 文件。
③创建一个Servlet(JSP页面的转换结果)的实例,该Servlet的jspInit0方法被执行,jspInit0方法在 Servlet 的生命周期中只被执行一次。
④用jspService0方法处理客户端的请求.对每一个请求,JSP 引擎创建一个新的线程来处理. 如果有多个客户端同时请求该 JSP 文件, 则 JSP 引擎会创建多个线程。 每个客户端请求对应一个线程。 以多线程方式执行, 可大大降低对系统的资源需求, 提高系统的并发处理量及缩短响应时间。 由于该 Servlet 始终驻留于内存, 所以可以非常迅速地响应客户端的请求。
⑤如果 JSP 文件被修改了, 服务器将根据设置决定是否对该文件重新编译, 如果需要重新编译, 则将以编译结果取代内存中的 Servlet, 并继续上述过程。
⑥虽然 JSP 的效率很高, 但在第一次调用时, 由于需要转换和编译, 会有一些轻微的延迟。此外,在任何时候,如果由于系统资源不足的原因,JSP引擎将以某种不确定的方式将Servlet 从内存中移去.当这种情况发生时,jspDestroy0方法首先被调用。然后 Servlet实例便被标记加入“垃圾收集”处理。可在jspInit()中进行一些初始化工作,如建立与数据库的连接,或建立网络连接连接、从配置文件中取一些参数等,然后在jspDestroy()中释放相应的资源。
jsp执行的过程如下图