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

org.apache.jasper.servlet.JspServletWrapper.service

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

org.apache.jasper.JspCompilationContext.compile

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

org.apache.jasper.JspCompilationContext.createCompiler

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

org.apache.jasper.compiler.Compiler.isOutDated

判断文件是否存在

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

..\Apache\apache-tomcat-8.0.36\work\Catalina\localhost\ROOT\org\apache\jsp\WEB_002dINF\views目录为空,故意删掉之前编译的jsp类文件

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

返回上一步

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

org.apache.jasper.JspCompilationContext.compile

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

org.apache.jasper.compiler.Compiler.compile

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

org.apache.jasper.compiler.Compiler.compile

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

org.apache.jasper.compiler.Compiler.generateJava

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

这个函数一直往下走到这一步:

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

org.apache.jasper.compiler.Compiler.setupContextWriter

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

jsp生成java类的关键代码

OutputStreamWriter osw = null;

        try {
            osw = new OutputStreamWriter(
                    new FileOutputStream(javaFileName), javaEncoding);
        } catch (UnsupportedEncodingException ex) {
            errDispatcher.jspError("jsp.error.needAlternateJavaEncoding",
                    javaEncoding);
        }

预先生成空文件占位

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

返回

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

org.apache.jasper.compiler.Generator.generate

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

org.apache.jasper.compiler.Generator.generatePostamble

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

到generatePostamble最后一行代码

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

org.apache.jasper.compiler.Generator.genCommonPostamble

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

org.apache.jasper.compiler.ServletWriter.printMultiLn

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

回到genCommonPostamble

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

popIndent

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

回到genCommonPostamble

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

回到generatePostamble

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

回到generate

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

回到generateJava

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

完成整个try过程,文件生成才完成

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

jsp生成的java文件

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

回到compile

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

下一步

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

org.apache.jasper.compiler.JDTCompiler.generateClass

编译.java文件为.class文件

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

下一步

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

下一步

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

下一步

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

下一步

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

下一步

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

下一步

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

下一步

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

终于编译完成

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

回到compile

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

回到compile

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

回到service

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

getServlet

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

第四步

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

(4) Service request

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

service

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

service

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

执行home_jsp.class文件

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

持续后退到doFilter

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

至此一个jsp的编译执行就完成了。

    原文作者:Spring Boot
    原文地址: https://blog.csdn.net/unix21/article/details/52220331
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞