springboot对静态资源的映射规则
首先我们找到这个类:WebMvcAutoConfiguration,从他的后缀看出这是一个有关springmvc自动配置类。在源码中有一个addResourceHandlers方法,这个方法就是对静态资源的配置
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
if (!this.resourceProperties.isAddMappings()) {
logger.debug("Default resource handling disabled");
return;
}
Integer cachePeriod = this.resourceProperties.getCachePeriod();
if (!registry.hasMappingForPattern("/webjars/**")) {
customizeResourceHandlerRegistration(
registry.addResourceHandler("/webjars/**")
.addResourceLocations(
"classpath:/META-INF/resources/webjars/")
.setCachePeriod(cachePeriod));
}
String staticPathPattern = this.mvcProperties.getStaticPathPattern();
if (!registry.hasMappingForPattern(staticPathPattern)) {
customizeResourceHandlerRegistration(
registry.addResourceHandler(staticPathPattern)
.addResourceLocations(
this.resourceProperties.getStaticLocations())
.setCachePeriod(cachePeriod));
}
}
第一种情况,
所有 /webjars/** ,都去 classpath:/METAINF/resources/webjars/ 找资源;就是我们以jar包的方式导入静态资源,在pom文件里面导入对应jar的依赖就可以了,
<!--引入jquery‐webjar -->
<dependency>
<groupId>org.webjars</groupId>
<artifactId>jquery</artifactId>
<version>3.3.1</version>
</dependency>
添加完上面的依赖后,我们可以看到在依赖中有了这个jar。
那么怎么检验有没有成功导入jQuery呢?
我们启动项目,然后进入localhost:8080/webjars/jquery/3.3.1/jquery.js。发现是可以的。
第二种情况,自己的资源文件
“/**” 访问当前项目的任何资源,如果没有处理,都去(静态资源的文件夹)找映射,那么这些静态资源文件夹的名字都是什么呢?
然后再点这个
我们可以看出在ResourceProperties里面的静态代码块,初始化了RESOURCE_LOCATIONS数组。
所以我们可以得出,文件夹的名字
"classpath:/META‐INF/resources/",
"classpath:/resources/",
"classpath:/static/",
"classpath:/public/"
"/":当前项目的根路径
这里我访问项目里面的Chart.min.js文件
在地址栏输入http://localhost:8080/asserts/js/Chart.min.js,因为本身就是从static文件夹下面找的,所以不用写static
如果在配置文件里面自己定义静态文件夹的名称,那么上面配置的静态资源就用不了了
上一篇: SpringBoot对静态资源的映射规则
下一篇: SpringBoot对静态资源的映射规则