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的编译执行就完成了。