在tomcat中jsp文件的大概执行过程

1.在Tomcat的公共设定中
    <servlet>
        <servlet-name>jsp</servlet-name>
        <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
........................
    </servlet>
    <servlet-mapping>
        <servlet-name>jsp</servlet-name>
        <url-pattern>*.jsp</url-pattern>
    </servlet-mapping>
可以看出*.jsp文件都是请求org.apache.jasper.servlet.JspServlet得。

2.下面再看看org.apache.jasper.servlet.JspServlet中做什么。
从源代码中可以看出,这个类是继承HttpServlet类,并覆盖了主要方法
public void service (HttpServletRequest request,
        HttpServletResponse response)
 throws ServletException, IOException {
在这个方法中找到jsp文件的路径jspUri,并执行方法serviceJspFile
接着在方法serviceJspFile中我们看到它新创建了一个类JspServletWrapper的实例,并执行了这个类实例的service方法。

3.接下来,我们再看看这个类org.apache.jasper.servlet.JspServletWrapper
在这个类中
我们可以看到在初始化的时候,创建了一个新的对象
      ctxt = new JspCompilationContext(jspUri, tagInfo, options,
      servletContext, this, rctxt,
      tagFileJarUrl);
找到方法
    public void service(HttpServletRequest request,
                        HttpServletResponse response,
                        boolean precompile)
     throws ServletException, IOException, FileNotFoundException
这里,使用了ctxt.compile(),对jsp文件进行了编译,
再调用方法getServlet();给Servlet类型对象theServlet赋值,
最后,调用theServlet的service方法。
由于从jsp转换来的java继承类HttpJspBase,我们可以从类HttpJspBase 中看到servcie方法又调用了_jspService方法,

这样最终调用了由jsp转换来的java中的_jspService方法

我们可以通过在……/jakarta-tomcat-5.0.28/work/Catalina/localhost/bbsSchool(项目名)/org/apache/jsp目录下找到从jsp转换来的java源文件,可以找到_jspService这个方法。

 *******************************

1的文件在目录:…/jakarta-tomcat-5.0.28/conf/web.xml

2中提到的类org.apache.jasper.servlet.jspServlet在目录:…/jakarta-tomcat-5.0.28/common/lib/jasper-compiler.rar里。里面是经过编译的class文件,可以去网上下载。

3中提到org.apache.jasper.servlet.JspServletWrapper在目录:同上。

********************************

你可能感兴趣的:(在tomcat中jsp文件的大概执行过程)