首页  

tomcat8.5 jsp编译过程     所属分类 tomcat 浏览量 1274
org.apache.catalina.servlets.DefaultServlet
org.apache.jasper.servlet.JspServlet

DefaultServlet 在 conf/web.xml 里定义
没有明确定义映射的资源 使用 DefaultServlet 处理
譬如静态资源


tomcat-embed-jasper-8.5.0 

jsp 编译成 servlet 后执行

Jsp使用单独的类加载器 , 重新编译不会导致整个应用重新加载


预编译  运行时编译

x.jsp?jsp_precompile
执行预编译

jsp引擎 jasper

jsp页面运行入口 
org.apache.jasper.servlet.JspServlet


将Jsp信息封装为JspServletWrapper,由 JspServletWrapper 执行业务处理

JspServletWrapper  Jsp引擎的核心,它负责编译、加载Jsp文件并完成请求处理。
每个Jsp页面对应一个JspServletWrapper实例。Tomcat会缓存JspServletWrapper以提升性能



JspCompilationContext

生成java 
编译成class


JDTCompiler extends org.apache.jasper.compiler.Compiler 

AntCompiler extends Compiler

Compiler
// Compile the jsp file into equivalent servlet in .java file
protected String[] generateJava() throws Exception

protected abstract void generateClass(String[] smap)
            throws FileNotFoundException, JasperException, Exception
            
编译生成 class 过程由具体子类实现


编译结果目录
一般为
$CATALINA_HOME/work/Engine/Host/Context/

本地嵌入式tomcat项目
tomcat-embed/target/classes/work/Tomcat/localhost/ROOT/org/apache/jsp

index_jsp.class	
index_jsp.java	
info_jsp.class	
info_jsp.java

可配置
scratchdir



<context-param>
    <param-name>scratchdir</param-name>
    <param-value>web-app/xxx/jsp/</param-value>
</context-param>




参考资料
Tomcat架构解析(刘光瑞)

上一篇     下一篇
tomcat8.5嵌入式启动

tomcat8.5架构概述

tomcat8.5启动过程远程调试

XML解析之Digester

tomcat8.5启动过程调试

fastjson使用技巧