1.SpringMVC自动配置概览 —autoConfiguration概念

2.静态资源、路径前缀、webjars、欢迎页 - 图8
2.静态资源、路径前缀、webjars、欢迎页 - 图9

2.静态资源访问目录 + 访问路径前缀 + webjars + 欢迎页 的使用

访问静态资源可以使用路径前缀,但是访问欢迎页不能使用路径前缀 如果出现了任何情况的不合理的情况,就清除浏览器缓存 + 重建项目

2.1 静态资源访问目录:spring.resources.static-locations

注意,访问的时候是不加静态目录的。但是可以加路径前缀

2.1.1 静态资源访问目录

  1. 有如下四种: /static /public /resources /META-INF/resources

2.静态资源、路径前缀、webjars、欢迎页 - 图10

  1. 代码测试验证

2.静态资源、路径前缀、webjars、欢迎页 - 图11
2.静态资源、路径前缀、webjars、欢迎页 - 图12

  1. 也可以去官方文档查看验证

2.静态资源、路径前缀、webjars、欢迎页 - 图13
2.静态资源、路径前缀、webjars、欢迎页 - 图14
2.静态资源、路径前缀、webjars、欢迎页 - 图15

2.1.2 访问流程:controller -> 静态目录

一个请求进来时,先去找Controller,看能不能处理。
不能处理的所有请求又都交给静态资源处理器。静态资源也找不到则响应404页面

静态映射/**

2.1.3 改变静态资源目录:

官方文档给出的方法

2.静态资源、路径前缀、webjars、欢迎页 - 图16

代码测试 - 失败代码

2.静态资源、路径前缀、webjars、欢迎页 - 图17
2.静态资源、路径前缀、webjars、欢迎页 - 图182.静态资源、路径前缀、webjars、欢迎页 - 图19

成功代码

2.静态资源、路径前缀、webjars、欢迎页 - 图20
2.静态资源、路径前缀、webjars、欢迎页 - 图21

2.2 给请求路径增加前缀:spring.mvc.static-path-pattern

2.静态资源、路径前缀、webjars、欢迎页 - 图22
2.静态资源、路径前缀、webjars、欢迎页 - 图23

2.3 webjack访问

2.3.1 什么是webjars?

  1. 就是css,html打成的一个jar包,比如jquery就是一个webjars
  2. 官网文档说法

2.静态资源、路径前缀、webjars、欢迎页 - 图24

2.3.2 代码测试

找到webjars,并且导入依赖

2.静态资源、路径前缀、webjars、欢迎页 - 图252.静态资源、路径前缀、webjars、欢迎页 - 图26

访问该jquery文件

注意,路径上必须加上 /webjars
2.静态资源、路径前缀、webjars、欢迎页 - 图27

2.4 两个小功能:欢迎页+标签上的小图标

默认是静态资源目录下的index.html,访问的时候直接 localhost:8080 即可。 注意,访问欢迎页不能设置访问前缀


2.4.1 欢迎页的两种设置方法(index.html必须放在静态资源目录下,而且不能有访问前缀)

image.png
2.静态资源、路径前缀、webjars、欢迎页 - 图29

2.4.2 小图标

必须放到静态资源目录下

image.png
文档:
2.静态资源、路径前缀、webjars、欢迎页 - 图31
image.png

3.上面四种功能的原理

即为什么静态资源有四个目录?为什么可以直接访问欢迎页?为什么可以加前缀?都是怎么起作用的?

3.1 先看看WebMvcAutoConfiguration

看一下主要配置类:WebMvcAutoConfiguration,下面是他的实现类的构造方法,这个方法有一些参数(主要看xxProperties两个参数
2.静态资源、路径前缀、webjars、欢迎页 - 图33image.png
加载的时候,这些参数是会自动的从容器里拿。
2.静态资源、路径前缀、webjars、欢迎页 - 图35

3.2 静态资源访问目录 + 路径前缀 + webjars 的原理:addResourceHandlers(),

2.静态资源、路径前缀、webjars、欢迎页 - 图36
这个方法除了说明了 静态资源规则,也说明了 /webjars的规则。 还说明了pattern机制(即请求路径前缀原则)

3.2.1 方法内容:

1.调用了ResourceProperties类(xxxProperties,顾名思义)里的isAddMappings()(此方法作用:查看静态资源映射是否开启,默认是true(开启))

静态路径是否生效取决于,resourceProperties类里的addMapping属性是true(生效)还是false
如果在配置文件里面设置addMapping为false,就是关闭映射。则静态路径不再生效
2.静态资源、路径前缀、webjars、欢迎页 - 图37
怎么查看addMapping的值呢?通过isAddMappings()方法。(类似于set,get方法)

下面是方法的具体内容(不看也行)
ResourceProperties里的 isAddMappings()
2.静态资源、路径前缀、webjars、欢迎页 - 图38
2.静态资源、路径前缀、webjars、欢迎页 - 图39

2.然后又调用了自身的addResourceHandler(),目的是,设置webjars和静态资源目录

2.静态资源、路径前缀、webjars、欢迎页 - 图40
而他又调用了mvcProperties#getStaticLocations(),目的是获取四种静态资源目录
2.静态资源、路径前缀、webjars、欢迎页 - 图41
方法的具体实现:不看也行
getStaticLocations():作用其实就是返回写死的4个静态资源的目录。

getStaticPathPattern()
默认是 /**,可以被修改
2.静态资源、路径前缀、webjars、欢迎页 - 图42
2.静态资源、路径前缀、webjars、欢迎页 - 图43
2.静态资源、路径前缀、webjars、欢迎页 - 图44
2.静态资源、路径前缀、webjars、欢迎页 - 图45

2.核心功能

getStaticPathPattern()默认是 /**,可以被修改2.静态资源、路径前缀、webjars、欢迎页 - 图462.静态资源、路径前缀、webjars、欢迎页 - 图472.静态资源、路径前缀、webjars、欢迎页 - 图482.静态资源、路径前缀、webjars、欢迎页 - 图49

3.2.2 另一个addResourceHandle():webjars和静态资源目录的具体实现。

不重要,忽略了。不过这里面有 设置缓存。

2.静态资源、路径前缀、webjars、欢迎页 - 图50聊一下这个缓存,下面红框里的整个方法结果就是返回ResourceProperties里的成员变量period。既然是这个类的成员变量,所以可以在配置文件中设置2.静态资源、路径前缀、webjars、欢迎页 - 图512.静态资源、路径前缀、webjars、欢迎页 - 图522.静态资源、路径前缀、webjars、欢迎页 - 图53
单位是秒,这个方法就是设置 静态资源在浏览器里的缓存时间,比如上面的11000秒,这个意思是浏览器会自动保存静态资源11000s,即使刷新也不会重新去服务器里再次请求静态资源。(通俗点说就是拿了服务器资源保存一定时间,这段时间内不管如果请求都不会再拿,而是用缓存的。)

3.3 看下欢迎页的处理规则 welcomePageHandlerMapping()

看代码,从容器里面拿了一堆参数,然后又new 了一个welcomePageHandlerMapping,传给了他一堆参数,其中就有 mvcProperties.getStaticPathPattern()(即请求前缀,默认是“/**”)2.静态资源、路径前缀、webjars、欢迎页 - 图542.静态资源、路径前缀、webjars、欢迎页 - 图55
2.静态资源、路径前缀、webjars、欢迎页 - 图56

3.4 favicon是浏览器自己配置的,和springboot关系不大。