tomcat8.5 jsp编译过程
所属分类 tomcat
浏览量 1493
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
scratchdir
web-app/xxx/jsp/
参考资料
Tomcat架构解析(刘光瑞)
上一篇
下一篇
tomcat8.5嵌入式启动
tomcat8.5架构概述
tomcat8.5启动过程远程调试
XML解析之Digester
tomcat8.5启动过程调试
fastjson使用技巧