image.png
1、在 tomcat 目录下, config/web.xml 文件
image.png
此文件是对所有 web 项目通用的 web.xml 配置文件,其中有这样的条目
<servlet>
<servlet-name>jsp</servlet-name>
<servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
<init-param>
<param-name>fork</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>xpoweredBy</param-name>
<param-value>false</param-value>
</init-param>
<load-on-startup>3</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>jsp</servlet-name>
<url-pattern>*.jsp</url-pattern>
<url-pattern>*.jspx</url-pattern>
</servlet-mapping>
可以发现, 所有以 .jsp
或 .jspx
为后缀的 url 都被转到 org.apache.jasper.servlet.JspServlet
去处理
2、org.apache.jasper.servlet.JspServlet
image.png
- JspServlet 与 普通的 Servlet 一样,也是继承了 HttpServlet
image.png
- 重写了 service 方法,其中经过一系列处理,将 3.jsp 文件 转成对应的 _3_jsp.java 文件,编译成 _3_jsp.class 文件,最后交由 类 _3_jsp 处理(第一次访问时,会生成编译,且如果 jsp 文件没有被修改过,则不会重新生成编译)
3、_3_jsp.java
生成的 .java 和 .class 在 work 目录下
image.png
image.png
public abstract class HttpJspBase extends HttpServlet implements HttpJspPage {
// 不是完整的 HttpBase
@Override
public final void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
_jspService(request, response);
}
@Override
public abstract void _jspService(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException;
}
_3_jsp extends HttpBase extends HttpServlet
可以看到 _3_jsp 仍是 HttpServlet 的子类
image.png
对 service 方法也有重写
网友评论