转到 Blog.com.cn 主页
混沌初开的BLOG

<<  < 2006 - >  >>
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31


 我的简介


 文章分类


  日志更新


 最新评论


最近留言


 搜索


 链接


 信息


 登陆






在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方法

我们可以通过在%TOMCAT_HOME%\work\目录下找到从jsp转换来的java源文件,可以找到_jspService这个方法。

by weiqingfei | 阅读全文 | 回复(1) | 引用通告 | 编辑



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

具体对jsp的parse,生成java文件,并编译的工作,应该都是在类org.apache.jasper.compiler.Compiler中进行的,由于这儿比较复杂,没有再进行分析。

by weiqingfei | 个人主页 | 引用 | 返回 | 删除 | 回复


发表评论:

    昵称:
    密码: (游客无须输入密码)
    主页:
    标题: