当前位置 : 主页 > 编程语言 > java >

jsp转化servlet流程

来源:互联网 收集:自由互联 发布时间:2021-06-25
我们知道jsp本质上上就是servlet,过去只知道tomcat帮我们完成了jsp向servlet的转化过程,却没有深入的去研究,现在就去研究一下转化过程 1.tomcat 的的拦截 很明显,既然tomcat帮我们完成

我们知道jsp本质上上就是servlet,过去只知道tomcat帮我们完成了jsp向servlet的转化过程,却没有深入的去研究,现在就去研究一下转化过程

1.tomcat 的的拦截

很明显,既然tomcat帮我们完成jsp向servlet的转换,必然要先拦截到该请求,通过观察tomcat的web.xml发现所有.jsp结尾的请求都会被交给jspservlet处理,jspservlet帮我们完成了转换
<servlet>
        <servlet-name>jsp</servlet-name>
            <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
        <servlet-mapping>
            <servlet-name>jsp</servlet-name>
            <url-pattern>*.jsp</url-pattern>
            <url-pattern>*.jspx</url-pattern>
        </servlet-mapping>
 </servlet>

2.转换后的jsp分析

(1) 当请求NewFile.jsp 这个jsp后会发现tomcat的work下生成了NewFile_jsp 的Java和class文件,

(2)打开这个NewFile_jsp.java发现它已经被转化为servlet,并且继承了HttpJspBase这个类
public final class NewFile_jsp extends org.apache.jasper.runtime.HttpJspBase
(3)HttpJspBase这是tomcat中的类,我把romcat源码导入项目看看HttpJspBase的实现,发现它继承了HttpServlet并实现了HttpJspPage接口,代码如下:可以看到其实就是实现了servlet接口中的那几个方法。它的init destory 方法中又分别调用了继承自Httpservlet中的初始化和销毁方法和来自jsppage接口中的初始化和销毁方法(前者是容器帮我们自动初始化完成必要的环境配置,后者是用户自定义初始化),service方法是实现了Httpjsppage中的_jspService(request, response)
public abstract class HttpJspBase extends HttpServlet implements HttpJspPage{
     public final void init(ServletConfig config) throws ServletException {
        super.init(config);
        this.jspInit();
        this._jspInit();
    }

    public String getServletInfo() {
        return Localizer.getMessage("jsp.engine.info");
    }

    public final void destroy() {
        this.jspDestroy();
        this._jspDestroy();
    }

    public final void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this._jspService(request, response);
    }

    ......
    ......
}

3.继承关系图

根据以上信息,大致能了解到jsp转化过程中的接口和类如下

    javax.Servlet.Servlet<Interface>
            |
            |
    javax.Servlet.jspPage<interface>     (jspInit,jspDestory方法)
            |
            |
    javax.Servlet.HttpjspPage<interface>  (jspService方法)
            |
            |
       HttpJspBase
网友评论