SpringBoot —— 静态资源映射规则
SpringBoot
默认为我们提供了静态资源的处理,其通过**自动配置类WebMvcAutoConfiguration
**实现的。此类存放了与web开发相关的各种配置属性和方法。
1 官方文档的描述
默认情况下,SpringBoot
从类路径中的
/static
目录(或/public
或/resources
或/META-INF/resources
)或ServletContext
的根目录中提供静态内容。
它使用SpringMVC
中的ResourceHttpRequestHandler
,
以便您可以通过添加自己的WebMvcConfigurer
并重写addResourceHandlers
方法来修改该行为。
名词解释:
前提,Maven 构建的SpringBoot 工程
-
静态资源:css、js、img、font等
-
类路径:项目下的
/src/main/java
和/src/main/resources

2 静态资源映射规则
2.1 对哪些目录映射?
WebMvcAutoConfiguration
类自动为我们注册了如下目录为静态资源目录,也就是说直接可访问到资源的目录。
优先级从上到下。
所以,如果static里面有个index.html,public下面也有个index.html,则优先会加载static下面的index.html,因为优先级!
classpath:/META-INF/resources/
classpath:/resources/
classpath:/static/
classpath:/public/
/:当前项目的根路径
2.2 目录映射 的理解
就我们在上面五个目录下放静态资源(比如:a.js等),可以直接访问(http://localhost:8080/a.js),类似于以前web项目的webapp下;放到其他目录下无法被访问。
2.3 为什么是这些目录?
2.3.1 看源码
自动配置类WebMvcAutoConfiguration
\org\springframework\boot\autoconfigure\web\servlet\WebMvcAutoConfiguration.class
/**
* 添加 资源处理器 的方法
*
* addResourceHandlers 是 WebMvcAutoConfiguration 实现了接口 WebMvcConfigurer 的方法
*
* @param registry ResourceHandlerRegistry: 资源处理注册器
*
* resourceProperties: 资源 配置类 来封装配置文件的内容
*/
public void addResourceHandlers(ResourceHandlerRegistry registry) {
if (!this.resourceProperties.isAddMappings()) {
logger.debug("Default resource handling disabled");
} else {
Duration cachePeriod = this.resourceProperties.getCache().getPeriod();
CacheControl cacheControl = this.resourceProperties.getCache().getCachecontrol().