Spring源码分析【7】-Spring 模板页和JSP文件的编译
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源码分析【7】-Spring 模板页和JSP文件的编译的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Spring源码分析【6】-Thread
- 下一篇: request.getSession(f