Spring源码分析【7】-Spring 模板页和JSP文件的编译

来源:互联网 发布:外贸网络推广 编辑:程序博客网 时间:2024/05/21 09:50


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

0 0
原创粉丝点击