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文件的编译相关推荐

  1. spring源码分析第六天------spring经典面试问题

    spring源码分析第六天------spring经典面试问题 1.Spring5 新特性及应用举例 2.Spring 经典的面试问题 a.什么是 Spring 框架?Spring 框架有哪些主要模块 ...

  2. Spring源码分析4 — spring bean创建和初始化

    1 介绍 创建并初始化spring容器中,refresh()方法中解析xml配置文件,注册容器后处理器,bean后处理器,初始化MessageSource,ApplicationEventMultic ...

  3. Spring源码分析3 — spring XML配置文件的解析流程

    1 介绍 创建并初始化spring容器中,关键一步就是读取并解析spring XML配置文件.这个过程比较复杂,本文将详细分析整个流程.先看涉及到的关键类. XmlWebApplicationCont ...

  4. spring源码分析之spring注解@Aspect是如何工作的?

    AOP(Aspect Orient Programming),面向切面编程,是面向对象编程OOP的一种补充.面向对象编程是从静态角度考虑程序的结构,面向切面编程是从动态的角度考虑程序运行过程. AOP ...

  5. spring源码分析之spring jmx

    JMX架构定义: https://docs.oracle.com/javase/8/docs/technotes/guides/jmx/overview/architecture.html Archi ...

  6. Spring源码分析(三)

    Spring源码分析 第三章 手写Ioc和Aop 文章目录 Spring源码分析 前言 一.模拟业务场景 (一) 功能介绍 (二) 关键功能代码 (三) 问题分析 二.使用ioc和aop重构 (一) ...

  7. Spring 源码分析衍生篇十 :Last-Modified 缓存机制

    文章目录 一.前言 二.Last-Modify 三.实现方案 1. 实现 org.springframework.web.servlet.mvc.LastModified接口 1.1. 简单演示 1. ...

  8. Spring源码分析八:Mybatis ORM映射框架原理

    文章目录 (一)Mybatis单独操作数据库程序 1.1.数据库表 1.2.建立PO 1.3.建立mapper接口映射 1.4.建立Mybatis配置文件 1.5.建立mapper映射文件 1.6.测 ...

  9. Spring 源码分析 (一)——迈向 Spring 之路

    一切都是从 Bean 开始的 在 1996 年,Java 还只是一个新兴的.初出茅庐的编程语言.人们之所以关注她仅仅是因为,可以使用 Java 的 Applet 来开发 Web 应用.但这些开发者很快 ...

最新文章

  1. 谷歌新智能体Dreamer将亮相NeurIPS 2019,数据效率比前身PlaNet快8个小时
  2. 编译安装PHP 时遇到问题解决方法.
  3. 【视频教程】JEECG 入门视频教程大全+历史版本号代码下载
  4. linux 卸载 openssl,请教Linux下Openssl安装的问题。
  5. 服务器重装之后连接不上及解决措施
  6. java post请求 json_好程序员Java教程分享Vue插件之Axios
  7. 计算机考研一些常纹面试知识,2020年光学工程考研复试真题和技巧
  8. sigmoid函数求导_交叉熵损失函数的求导(Logistic回归)
  9. 基本数据结构 - 栈和队列
  10. 数千万智能手机集体脱机?罪魁祸首是……
  11. Codeforces Round #FF (Div. 2) D. DZY Loves Modification 贪心+优先队列
  12. 递归法:走楼梯; 旋转数组的最小数字(递归法和改进二分法)
  13. mysql空指针异常处理_mysql 查询空指针异常
  14. redis数据结构存储Linked List设计细节(redis的设计与实现笔记)
  15. 快速排序算法--两个小人扔萝卜
  16. navicat for mysql 破解版 中文免费
  17. PyCharm2021设置成中文版
  18. 小程序毕设作品之微信美食菜谱小程序毕业设计成品(6)开题答辩PPT
  19. 关于计算机文献检索报告,计算机专业文献检索论文参考选题.doc
  20. mysql去空格trim_mysql去空格函数trim

热门文章

  1. Java就业难不难?是否要参加Java培训?
  2. Python、Matplot的subplot实现一行3列的子图绘制,并添加背景色
  3. C++:将char*指针强制转换成一个指向结构体的指针
  4. jetson nano 用 tensorrt 运行 nanodet(kitti数据集)
  5. python七大神级插件_IntelliJ IDEA 15款超级牛逼插件推荐(自用,超级牛逼)
  6. linux c 屏幕触摸_交互式拼接屏应用互动触摸屏实现大屏幕拼接墙
  7. CUDA之单thread单block多thread单block多thread多block
  8. ADPRL - 近似动态规划和强化学习 - Note 8 - 近似策略迭代 (Approximate Policy Iteration)
  9. 在CentOS 6.9 x86_64的nginx 1.12.2上开启ngx_http_empty_gif_module模块实录
  10. vim 7.4同时支持python 2.x和3.x问题调研