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:
 


spring boot 运行jsp原理分析的更多相关文章

  1. Spring Boot 实战与原理分析视频课程

    Spring Boot 实战与原理分析视频课程 链接:https://pan.baidu.com/share/init?surl=PeykcoeqZtd1d9lN9V_F-A 提取码: 关注公众号[G ...

  2. spring boot应用启动原理分析

    spring boot quick start 在spring boot里,很吸引人的一个特性是可以直接把应用打包成为一个jar/war,然后这个jar/war是可以直接启动的,不需要另外配置一个We ...

  3. Spring Boot应用启动原理分析(转)

    在spring boot里,很吸引人的一个特性是可以直接把应用打包成为一个jar/war,然后这个jar/war是可以直接启动的,不需要另外配置一个Web Server. 如果之前没有使用过sprin ...

  4. Spring Boot运行原理

    概述 本文主要写了下Spring Boot运行原理,还有一个小例子. Spring4.x提供了基于条件来配置Bean的能力,而Spring Boot的实现也是基于这一原理的. Spring Boot关 ...

  5. Spring Boot自动配置原理(转)

    第3章 Spring Boot自动配置原理 3.1 SpringBoot的核心组件模块 首先,我们来简单统计一下SpringBoot核心工程的源码java文件数量: 我们cd到spring-boot- ...

  6. Spring Boot自动配置原理、实战

    Spring Boot自动配置原理 Spring Boot的自动配置注解是@EnableAutoConfiguration, 从上面的@Import的类可以找到下面自动加载自动配置的映射. org.s ...

  7. Spring boot整合jsp

    这几天在集中学习Spring boot+Shiro框架,因为之前view层用jsp比较多,所以想在spring boot中配置jsp,但是spring boot官方不推荐使用jsp,因为jsp相对于一 ...

  8. Spring Boot 添加JSP支持【转】

    Spring Boot 添加JSP支持 大体步骤: (1)            创建Maven web project: (2)            在pom.xml文件添加依赖: (3)     ...

  9. 81. Spring Boot集成JSP疑问【从零开始学Spring Boot】

    [原创文章,转载请注明出处] 针对文章: ()Spring Boot 添加JSP支持[从零开始学Spring Boot] 有网友提了这么一些疑问: 1.Spring Boot使用jsp时,仍旧可以打成 ...

随机推荐

  1. 1305: [CQOI2009]dance跳舞

    Time Limit: 5 Sec  Memory Limit: 162 MBSubmit: 4169  Solved: 1804[Submit][Status][Discuss] Descripti ...

  2. 如何禁止js缓存?

    <html> <head> <script type="text/javascript"> document.write("<s ...

  3. Matlab数据转化至python端,并写入数据库

    因工作原因,一些获取的行业数据以已知的结构体存储在.mat文件中, 现需要将其存储在数据库中并且能够灵活调用至python dataframe里进行操作 原数据的一个例子如下 目标如上: 然后是转化代 ...

  4. hadoop启动时权限不足

    之前在使用时的没用去懂.ssh,后来因为一些情况直接将其权限修改为777. 第一位7等于4+2+1,所以就是rwx,所有者有读取.写入.执行的权限:第二位7也是4+2+1,rwx,同组用户具有读取.写 ...

  5. Django--源码安装

    1.安装setuptools cd /usr/src tar zxf setuptools-18.3.2.tar.gz cd setuptools-18.3.2/ python setup.py bu ...

  6. Android stadio 电脑连上手机可以识别,但是连不上Android stadio

    原来是因为电脑没有装Android 手机驱动,我电脑刚装了系统. 很多驱动没有装.我有一个联想驱动管理,提示我装Android手机驱动.装完之后,就可以识别到手机了. 如果你的手机在电脑不识别,那么装 ...

  7. 在Foxmail中添加阿里云企业邮箱账号

    1.安装完成Foxmail之后,新建账号 输入阿里云邮箱地址和密码,点击创建 接受服务器类型你可以选择POP3或者IMAP,在这里我选择的是POP3 点击创建,大功告成. 为什么要写这篇文章呢? 因为 ...

  8. laravel5.2总结--本地化以及常量的使用

    1.本地化 Laravel 的本地化功能提供方便的方法来获取多语言的字符串,让你的网站可以简单的支持多语言. 语言包存放在 resources/lang 文件夹的文件里.每一个子目录应该对应一种语言 ...

  9. IOS开发学习笔记012-核心语法

    1.点语法 2.成员变量的作用域 3. @property和@synthesize 4.id类型 5.构造方法 6.自定义构造方法 7.模板修改 8.Category - 分类 9.类扩展 一.点语法 ...

  10. Aptana Studion出现 duplicate location重复定位报错

    1.下载SVN的时候出现报错 duplicate location 2.点击“available software sites”查看已可用的软件网站 3.在这里可以查看到SVN,勾选SVN复选框,点击 ...