1、将WEB应用部署到TOMCAT容器,容器启动读取应用的部署文件web.xml,但不对.jsp文件做任何处理请求。
2、当客户点击某个链接请求某个.jsp文件时,容器开始将.jsp文件转换为一个.java文件,对于Tomcat5所生成的servlet会扩展org.apache.jasper.runtime.HttpJspBase类。若jsp文件有一个page指令中有import属性,生成的类文件的最上面会写入import语句。Tomca5声明了自己的一个静态方法和一个实例方法。然后建立服务方法,方法名为_jspService()。所生成的servlet会覆盖servlet超类的service()方法。_jspService()直接由service()调用,要接收HttpServletRequest和HttpServletResponse作为输入参数。在建立这个方法的时候,容器会声明并初始化所有的隐式对象。将普通的HTML、scrptlet和表达式放到服务方法里,进行格式化,并写至PrintWrite,作为输出响应。
3、容器尝试将这个.java源文件编译为.class文件,现在已成为一个完整的servlet。
4、容器加载新生成的servlet。
5、容器实例化servlet,并导致servlet的jspInit()方法运行,这时servlet准备就绪,接受客户的请求。
6、容器创建一个新线程运行servlet的service()方法来处理客户请求。以后的处理同普通的servlet处理过程一样,最终servlet向客户返回一个响应。
需要注意的是:在JSP生命周期中,JSP的转换和编译过程只发生一次。一旦第一次编译完成,以后的调用同普通的servlet一样。大多数容器开发商提供预转化和编译的办法,使这些工作提前完成。 |