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

    xiaoxiao2026-05-15  14

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

    转载请注明原文地址: https://ju.6miu.com/read-1309703.html
    最新回复(0)