IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> SpringBoot之Web开发(静态资源配置原理) -> 正文阅读

[Java知识库]SpringBoot之Web开发(静态资源配置原理)

SpringBoot之Web开发(静态资源、欢迎页面、Favicon)

前文讲解了SpringBoot中静态资源、欢迎页面、Favicon都是如何使用的,本文将简洁静态资源的配置原理。

1、找到WebMvcAutoConfiguration

SpringMVC功能的自动配置类 WebMvcAutoConfiguration。与MVC有关的东西SpringBoot中都是通过WebMvcAutoConfiguration进行配置的。

下面我们打开WebMvcAutoConfiguration来查看源码,看看静态资源配置原理。

在左侧导航栏External Libraries中点开,如下所示

?在org.springframework.boot.autoconfigure文件夹中找到web目录,在web目录中找到WebMvcAutoConfiguration并进入查看源码。

?2、WebMvcAutoConfiguration中关于静态资源配置的源码解读

(1)首先查看配置类WebMcvAutoConfiguration有没有生效,如下代码可以看到在条件装配中没有爆红,说明生效。

?(2)在代码中可以看到该部分向容器中配置了很多东西,下面我们看一下内部静态类?WebMvcAutoConfigurationAdapter,翻译为中文就是WebMvc自动配置适配器

首先这是一个配置类,然后@Import()注解引入WebMvc需要的所有内容。@EnableConfigurationProperties注解开启配置绑定并把绑定的结果装入容器,其中WebMvcProperties.class与配置文件中前缀为spring.mvc的内容绑定。WebProperties与配置文件中spring.web的内容绑定。(配置绑定的内容详细查看前文:配置绑定

?继续往下看代码可以看到配置类的有参构造函数,也就是把容器中的内容取出初始化成员变量。下面解释一下各个变量。

WebProperties webProperties:获取和spring.web绑定的所有的值的对象

WebMvcProperties mvcProperties:获取和spring.mvc绑定的所有的值的对象

ListableBeanFactory beanFactory:Spring的beanFactory,这其实是IOC容器

HttpMessageConverters: 找到所有的HttpMessageConverters

ResourceHandlerRegistrationCustomizer: 找到资源处理器的自定义器

DispatcherServletPath:DispatcherServlet能处理的路径

ServletRegistrationBean:?给应用注册Servlet、Filter....

?以上是初始化的内容,了解一下即可,与本文讲解的内容关系并不大。

(3)找到静态资源处理的代码,并打断点调试。其中resourceProperties就是webProperties.getResources()也就是spring.web中的配置内容。并且resourceProperties有个方法isAddMappings(),返回addMappings属性,addMappings属性默认为true。如果addMappings为ture则if中为false,那么直接走下去;如果addMappings属性为false,则if中为true,则直接return。因此addMapping的属性值用于控制静态资源能够被访问。

下面我们在配置文件中修改addMappings的值为false来验证一下:

spring.web.resources.add-mappings=false

?重启服务并访问静态资源,此时已经无法访问

?把false改为ture重新运行,又可以访问了。

?当add-mappings设置为true,那么代码继续向下运行到红色框,这部分的意思就是:如果访问路径是/webjars/**,那么就从类路径的/META-INF/resources/webjars/中寻找资源。

?如果与this.mvcProperties.getStaticPathPattern()匹配就运行下图红色框。我们可以看一下this.mvcProperties.getStaticPathPattern()是什么,可以看到getStaticPathPattern()返回staticPathPattern,staticPathPattern=/**。如果和/**匹配那么注册器中注册this.resourceProperties.getStaticLocations(),点进去可以看到getStaticLocations()返回staticLocations,再点进staticLocations看到就是SpringBoot静态资源存放的四个路径(

/META-INF/resources/,/resources/,/static/,/public/)。

?

?这就和前文中静态资源访问联系起来了,其实内部是写死的。默认当访问路径匹配/webjars/**时去访问/META-INF/resources/webjars/中对应的内容。当访问路径匹配/**时去访问类路径下四个静态资源存放的文件夹。

?(4)欢迎页面配置代码

?上述代码其实就是new了一个WelcomePageHandlerMapping,然后返回并装入容器。点进WelcomePageHandlerMapping的构造函数查看源码:

?可以看到第一个if中判断welcomePage欢迎页是否为空并且staticPathPattern必须为默认的/**那么直接访问index.html。

如果不满足上述要求则运行else if中的内容,这部分就对应controller中是否有/index的访问路径,有的话,则打开网站直接访问/index。

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-10-17 12:18:51  更:2022-10-17 12:21:27 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 -2025/1/30 13:50:59-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码