设计的Spring等静态资源,如HTML文件和JS文件 有两种Boot配置,一种是“spring.mvc.static-path-pattern”,一是“spring.resources.static-locations很多人很难分辨它们之间的差异,所以经常发生的结果是404错误,静态资源找不到。
1. spring.mvc.static-path-patternspring.mvc.static-path-pattern的意思是我们应该以什么样的方式访问静态资源,换句话说,只有静态资源才能满足什么样的匹配条件,Spring 以官方配置为例,Boot将处理静态资源请求:
# 这表明只有静态资源的访问路径是/resources/**只有在处理spring时才会处理请求.mvc.static-path-pattern=/resources/**,
假设采用默认配置端口,则只有要求地址类似于“http://localhost:8080/resources/jquery.js”时,Spring Boot将处理此请求,处理方法是根据模式匹配的文件名查找本地文件,那么应该在哪里查找本地文件呢?这就是“spring.resources.static-locations"的作用。
2. spring.resources.static-locations“spring.resources.static-locations用来告诉Spring Boot应该在哪里找到静态资源文件,这是一个列表配置,依赖于配置顺序,默认的官方配置如下:
spring.resources.static-locations=classpath:/static,classpath:/public,classpath:/resources,classpath:/META-INF/resources
继续以上述请求地址为例,“http://localhost:8080/resources/jquery.js在上述四条路径中,我们将依次搜索是否存在“jquery.js“如果找到文件,返回文件,否则返回404错误。
3. Bean配置静态资源从上面可以看出,“spring.mvc.static-path-pattern”与“spring.resources.static-locations如果熟悉Springgng的映射配置,则结合起来演绎nginx的映射配置 MVC,所以更容易理解,它们的作用可以用Bean配置来表示,如下:
@Configuration@EnableWebMvcpublic class WebConfig extends WebMvcConfigurerAdapter {@Overridepublic void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/resources/** 匹配要求路径 .addResourceLocations("/public-resources/")// 实际路径的映射 .setCacheControl(CacheControl.maxAge(1, TimeUnit.HOURS).cachePublic()); }}
或者等同于以下XML。
<mvc:resourcesmapping="/resources/**" location="/public-resources/"><mvc:cache-controlmax-age="3600"cache-public="true"/></mvc:resources>
结论spring.mvc.static-path-pattern
用于阐述HTTP请求地址
spring.resources.static-locations
用于描述静态资源的实际存储位置