spring boot 运行jsp原理分析

版权声明:本文为博主原创文章,转载请注明出处,不得用于商业用途。 https://blog.csdn.net/pilihaotian/article/details/78079893
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
 
  1. 编写JSP页面
 
  1. 编写启动类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:
 


猜你喜欢

转载自blog.csdn.net/pilihaotian/article/details/78079893