spring boot 运行jsp原理分析

扫码关注公众号:Java 技术驿站

发送:vip
将链接复制到本浏览器,永久解锁本站全部文章

【公众号:Java 技术驿站】 【加作者微信交流技术,拉技术群】

Spring-boot运行jsp原理分析 结论:

  1. 启动server的时候会创建临时目录
  2. 在浏览器中访问jsp文件的时候通过内置Tomcat将jsp转换为java,保存在临时目录中
  3. 然后编译为class文件,保存在临时目录中。

分析过程如下:
编码阶段: 1、官方不推荐在spring-boot中使用jsp文件。 如果要使用,需要添加
jasper依赖:

<
dependency

<
groupId

org.springframework.boot
</
groupId

<
artifactId

spring-boot-starter-
tomcat
</
artifactId

<
scope

provided
</
scope

</
dependency

<
dependency

<
groupId

org.apache.tomcat.embed
</
groupId

<
artifactId

tomcat
-embed-
jasper
</
artifactId

<!–provided–>

</
dependency

2、配置文件属性 src/main/resources/application.properties配置文件
# 页面默认前缀目录
spring.mvc.view.prefix
=
/WEB-INF/jsp/
# 响应页面默认后缀
spring.mvc.view.suffix
=
.jsp
# 自定义属性,可以在Controller中读取
application.XXX
=YYY

  1. 编写Controller

  2. 编写JSP页面

  3. 编写启动类App.java

结构图如下
20191102100508\_1.png

打包阶段 需要在pom中的build中增加如下属性,目的是将指定目录下的资源打包:

<
resources

<!– 打包时将
jsp
文件拷贝到META-INF目录下–>

<
resource

<!– 指定resources插件处理哪个目录下的资源文件 –>

<
directory

src
/main/
webapp
</
directory

<!–注意此次必须要放在此目录下才能被访问到–>

<
targetPath

META-INF/resources
</
targetPath

<
includes

<
include

**/**
</
include

</
includes

</
resource

<
resource

<
directory

src
/main/resources
</
directory

<
includes

<
include

**/**
</
include

</
includes

<
filtering

false
</
filtering

</
resource

</
resources

启动并调试Fat-jar,分析源码 Jar包物理图:
20191102100508\_2.png

  1. 调用TomcatEmbeddedServletContainerFactory 类中的getEmbeddedServletContainer方法。

Tomcat
tomcat
=
new
Tomcat();
File
baseDir
= (
this
.
baseDirectory
!=
null
?
this
.
baseDirectory
: createTempDir(
“tomcat”
));

  1. 创建Tomcat实例。
  2. 第一次启动的时候,会创建临时目录basedir,两个文件夹,路径位置例如以下所示:C:\Users\用户名

    \AppData\Local\Temp\tomcat.7897322053330749685.8080和tomcat-docbase.1385973521217649694.8080

初始目录中内容为空。

  1. 初始化defaultServlet

20191102100508\_3.png

  1. 初始化JspServlet

20191102100508\_4.png

…… …… ……

  1. 启动自定义application

  2. 访问jsp。

20191102100508\_5.png

通过
Archive提供的
URL(如果
Archive中有子
Archive,可以通过第二个方法获取)。然后通过
Classloader提供的访问
classpath resource的能力来实现的。
jsp访问路径在之前的配置文件中:
spring.view.prefix:
/WEB-INF/jsp/

  1. 在浏览器中输入jsp地址,会调用内置Tomcat

provides: tomcat-embed-core 将jsp文件转换为java servlet文件,编译为class。

  1. 可以发现,临时目录下已经出现如下文件*.java和*.class:

20191102100508\_6.png


来源:http://ddrv.cn

赞(0) 打赏
版权归原创作者所有,任何形式的转载请联系博主:daming_90:Java 技术驿站 » spring boot 运行jsp原理分析

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏