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