SpringBoot运行jsp原理浅析
结论
- 启动server的时候会创建临时目录
- 在浏览器中访问jsp文件的时候通过内置Tomcat将jsp转换为java,保存在临时目录中
- 然后编译为class文件,保存在临时目录中
分析过程
jsp依赖
官方不推荐在spring-boot中使用jsp文件。如果要使用,需要添加jasper依赖。
1 |
|
配置文件属性
src/main/resources/application.properties
配置文件
1 |
|
编码
- 编写Controller
- 编写JSP页面
- 编写启动类
结构图如下
打包阶段
需要在pom中的build中增加如下属性,目的是将指定目录下的资源打包:
1 |
|
启动并调试Fat-jar
Jar包物理图:
源码分析
- 调用TomcatEmbeddedServletContainerFactory 类中的getEmbeddedServletContainer方法。
1
2Tomcat tomcat = new Tomcat();
File baseDir = (this.baseDirectory != null ? this.baseDirectory: createTempDir("tomcat")); - 创建Tomcat实例
- 第一次启动的时候,会创建临时目录basedir,两个文件夹,路径位置例如以下所示:C:\Users\用户名\AppData\Local\Temp\tomcat.7897322053330749685.8080和tomcat-docbase.1385973521217649694.8080
初始目录中内容为空 - 初始化defaultServlet
- 初始化JspServlet
- ……
- 启动自定义application
- 访问jsp
通过Archive提供的URL(如果Archive中有子Archive,可以通过第二个方法获取)。然后通过Classloader提供的访问classpath resource的能力来实现的。
jsp访问路径在之前的配置文件中:1
spring.view.prefix: /WEB-INF/jsp/
- 在浏览器中输入jsp地址,会调用内置Tomcat
provides: tomcat-embed-core
将jsp文件转换为java servlet文件,编译为class。 - 可以发现,临时目录下已经出现如下文件*.java和*.class
SpringBoot运行jsp原理浅析
https://leehoward.cn/2019/10/17/SpringBoot运行jsp原理浅析/