SpringBoot - 对静态资源的映射规则
2018-05-09 本文已影响17人
BzCoder
一.SpringBoot对静态资源的映射规则
在正式开始使用SpringBoot开发Web应用之前,我们先来研究下SpringBoot的映射规则,要研究映射规则我们就得看Web相对应的自动配置类,也就是WebMvcAutoConfiguration:
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
if (!this.resourceProperties.isAddMappings()) {
logger.debug("Default resource handling disabled");
return;
}
Duration cachePeriod = this.resourceProperties.getCache().getPeriod();
CacheControl cacheControl = this.resourceProperties.getCache()
.getCachecontrol().toHttpCacheControl();
//在"classpath:/METAINF/resources/webjars/"中搜索Webjar资源
if (!registry.hasMappingForPattern("/webjars/**")) {
customizeResourceHandlerRegistration(registry
.addResourceHandler("/webjars/**")
.addResourceLocations(
"classpath:/METAINF/resources/webjars/")
.setCachePeriod(getSeconds(cachePeriod))
.setCacheControl(cacheControl));
}
//在staticPathPattern中搜索Webjar资源
String staticPathPattern = this.mvcProperties.getStaticPathPattern();
if (!registry.hasMappingForPattern(staticPathPattern)) {
customizeResourceHandlerRegistration(
registry.addResourceHandler(staticPathPattern)
.addResourceLocations(getResourceLocations(
this.resourceProperties.getStaticLocations()))
.setCachePeriod(getSeconds(cachePeriod))
.setCacheControl(cacheControl));
}
}
在代码中我们可以发现,有两个静态资源导入的方式。
首先我们先看第一种Webjars方式,我们引入jquery
<dependency>
<groupId>org.webjars</groupId>
<artifactId>jquery</artifactId>
<version>3.3.1-1</version>
</dependency>
webjar:以jar包的方式引入静态资源。
首先我们来看WebMvc的自动配置类WebMvcAutoConfiguration:
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
if (!this.resourceProperties.isAddMappings()) {
logger.debug("Default resource handling disabled");
return;
}
Duration cachePeriod = this.resourceProperties.getCache().getPeriod();
CacheControl cacheControl = this.resourceProperties.getCache()
.getCachecontrol().toHttpCacheControl();
//在"classpath:/METAINF/resources/webjars/"中搜索Webjar资源
if (!registry.hasMappingForPattern("/webjars/**")) {
customizeResourceHandlerRegistration(registry
.addResourceHandler("/webjars/**")
.addResourceLocations(
"classpath:/METAINF/resources/webjars/")
.setCachePeriod(getSeconds(cachePeriod))
.setCacheControl(cacheControl));
}
//在staticPathPattern中搜索Webjar资源
String staticPathPattern = this.mvcProperties.getStaticPathPattern();
if (!registry.hasMappingForPattern(staticPathPattern)) {
customizeResourceHandlerRegistration(
registry.addResourceHandler(staticPathPattern)
.addResourceLocations(getResourceLocations(
this.resourceProperties.getStaticLocations()))
.setCachePeriod(getSeconds(cachePeriod))
.setCacheControl(cacheControl));
}
}
从代码中我们可以看到有两种引入静态资源的方式。
1.Webjars
我们引入jquery为例
<dependency>
<groupId>org.webjars</groupId>
<artifactId>jquery</artifactId>
<version>3.3.1-1</version>
</dependency>
引入后可以看到如下目录
webjars目录结构
此时我们重启后请求 http://localhost:8080/webjars/jquery/3.3.1-1/jquery.js
( 对应 classpath:/METAINF/resources/webjars/
格式路径),就可以请求到/jquery.js的内容了。
webjar:以jar包的方式引入静态资源。
2.本地导入
通过查看源码,我们可以看到
staticPathPattern = "/**"; //匹配路径下的任何文件
以下是SpringBoot默认的四个是静态资源文件夹,也就是说资源文件会到以下四个目录去查找
"classpath:/META-INF/resources/",
"classpath:/resources/",
"classpath:/static/",
"classpath:/public/"
在静态资源文件夹中有几个文件名是默认的。
index:欢迎页
favicon.ico:顶端图标文件
只要将相关的文件放入目录中,我们输入路径后即可访问。
假如看了感觉还不错的话,可以点个喜欢哦。