spring boot 对 web 静态资源的配置管理是通过配置类 WebMvcAutoConfiguration
来实现的。
WebMvcAutoConfiguration 的理解
顾名思义,WebMvcAutoConfiguration 是web开发的相关配置都放在该类中的。那我们看看静态资源是如何配置的呢?
addResourceHandlers 方法中对静态资源路径做了说明
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();
if (!registry.hasMappingForPattern("/webjars/**")) {
customizeResourceHandlerRegistration(registry
.addResourceHandler("/webjars/**")
.addResourceLocations("classpath:/META-INF/resources/webjars/")
.setCachePeriod(getSeconds(cachePeriod))
.setCacheControl(cacheControl));
}
//staticPathPattern的值是 /**
String staticPathPattern = this.mvcProperties.getStaticPathPattern();
if (!registry.hasMappingForPattern(staticPathPattern)) {
customizeResourceHandlerRegistration(
registry.addResourceHandler(staticPathPattern)
.addResourceLocations(getResourceLocations(
this.resourceProperties.getStaticLocations()))
.setCachePeriod(getSeconds(cachePeriod))
.setCacheControl(cacheControl));
}
}
从上面的代码中可以解读出两点关键信息:
-
所有的
"/webjars/**
都去classpath:/META-INF/resources/webjars/
路径下找静态资源- 什么是webjars :以jar包的形式引入静态资源文件
- webjars官方网站
- 比如我们现在要使用 jquery 框架,在webjars官网找到他的依赖放到你的项目当中即可
<dependency> <groupId>org.webjars.bower</groupId> <artifactId>jquery</artifactId> <version>3.3.1</version> </dependency>
-
如果路径是
/**
时,就去以下classpath:/META-INF/resources/ classpath:/resources/ classpath:/static/ classpath:/public/
类路径查找资源文件,idea 中的项目路径如下图所示:
那我们如何访问静态资源呢?通过下面的url可直接访问http://localhost:8080/asserts/css/bootstrap.min.css
但是注意,假如你把静态资源存放在
classpath:/static/
,试图通过http://localhost:8080/static/asserts/css/bootstrap.min.css
来访问静态资源是访问不到的。
3.欢迎页面的映射
private Resource getIndexHtml(String location) {
return this.resourceLoader.getResource(location + "index.html");
}
意思是只要在我们的静态资源文件夹中放有 index.html文件,就能自动访问到,比如:http://localhost:8080,静态文件目录指的是 2 中提到的目录。
如何自定义资源文件路径
我们的资源文件路径属性是有ResourceProperties
中定义的。
@ConfigurationProperties(prefix = "spring.resources", ignoreUnknownFields = false)
public class ResourceProperties {
private static final String[] CLASSPATH_RESOURCE_LOCATIONS = {
"classpath:/META-INF/resources/", "classpath:/resources/",
"classpath:/static/", "classpath:/public/" };
private String[] staticLocations = CLASSPATH_RESOURCE_LOCATIONS;
}
所以自定路径只需要覆盖 staticLocations 的默认路径即可,在 application.properties 文件中设置该路径
spring.resources.static-locations=classpath:/hello,classpath:/test #可以设置多个路径
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。