前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >spring boot 运行jsp原理分析

spring boot 运行jsp原理分析

作者头像
leehao
发布2025-02-11 12:57:20
发布2025-02-11 12:57:20
860
举报
文章被收录于专栏:leehaoleehao

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 >

<!--<scope>provided</scope>-->

</ 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

结构图如下

打包阶段

需要在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包物理图:

  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
    1. 初始化JspServlet

……

……

……

    1.  启动自定义application
    1. 访问jsp。

通过 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:
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-02-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档