org.apache.jasper.servlet.JspServletWrapper.service
org.apache.jasper.JspCompilationContext.compile
org.apache.jasper.JspCompilationContext.createCompiler
org.apache.jasper.compiler.Compiler.isOutDated
判断文件是否存在
..\Apache\apache-tomcat-8.0.36\work\Catalina\localhost\ROOT\org\apache\jsp\WEB_002dINF\views目录为空,故意删掉之前编译的jsp类文件
返回上一步
org.apache.jasper.JspCompilationContext.compile
org.apache.jasper.compiler.Compiler.compile
org.apache.jasper.compiler.Compiler.compile
org.apache.jasper.compiler.Compiler.generateJava
这个函数一直往下走到这一步:
org.apache.jasper.compiler.Compiler.setupContextWriter
jsp生成java类的关键代码
OutputStreamWriter osw = null;
try {
osw = new OutputStreamWriter(
new FileOutputStream(javaFileName), javaEncoding);
} catch (UnsupportedEncodingException ex) {
errDispatcher.jspError("jsp.error.needAlternateJavaEncoding",
javaEncoding);
}
返回
org.apache.jasper.compiler.Generator.generate
org.apache.jasper.compiler.Generator.generatePostamble
到generatePostamble最后一行代码
org.apache.jasper.compiler.Generator.genCommonPostamble
org.apache.jasper.compiler.ServletWriter.printMultiLn
回到genCommonPostamble
popIndent
回到genCommonPostamble
回到generatePostamble
回到generate
回到generateJava
完成整个try过程,文件生成才完成
jsp生成的java文件
回到compile
下一步
org.apache.jasper.compiler.JDTCompiler.generateClass
编译.java文件为.class文件
下一步
下一步
下一步
下一步
下一步
下一步
下一步
终于编译完成
回到compile
回到compile
回到service
getServlet
第四步
(4) Service request
service
service
执行home_jsp.class文件
持续后退到doFilter
至此一个jsp的编译执行就完成了。
本文详细探讨了Spring中JSP文件的编译流程,从`JspServletWrapper.service`开始,经过`JspCompilationContext.compile`和`Compiler.generateJava`等关键步骤,直至生成`.class`文件并执行。文章深入分析了JSP到Java类的转换,包括判断文件是否过期、删除旧的编译文件,以及使用JDTCompiler进行编译的过程,最后执行生成的`.class`文件,完整展示了JSP请求的处理流程。
11万+

被折叠的 条评论
为什么被折叠?



