SpringBoot中有兩項靜態資源配置項:
1、spring.mvc.static-path-pattern
2、spring.resources.static-locations
配置出差錯時,導致404錯誤,找不到靜態資源;
1、 spring.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 = classpath:/static,classpath:/public,classpath:/resources,classpath:/META-INF/resources
繼續以上面的請求地址爲例,“http://localhost:8080/resources/jquery.js”就會在上述的四個路徑中依次查找是否存在“jquery.js”文件,如果找到了,則返回此文件,否則返回404錯誤。
2.1、配置file路徑
需要指定的是一個具體的硬盤路徑時,需要使用file,其他的使用classpath指的是系統環境變量;
file.uploadFolder = /home/uploadFiles/
spring.resources.static-locations = classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/,file:${file.uploadFolder}
3、靜態資源的Bean配置
“spring.mvc.static-path-pattern”與“spring.resources.static-locations”組合起來演繹了nginx的映射配置,如果熟悉Spring MVC,那麼理解起來更加簡單,它們的作用可以用Bean配置表示,如下:
@Configuration
@EnableWebMvc
public class WebConfig extends WebMvcConfigurerAdapter {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/resources/**")
.addResourceLocations("/public-resources/")
.setCacheControl(CacheControl.maxAge(1, TimeUnit.HOURS).cachePublic());
}
}
或者等同與以下的XML;
<mvc:resources mapping="/resources/**" location="/public-resources/">
<mvc:cache-control max-age="3600" cache-public="true"/>
</mvc:resources>
4、總結
“spring.mvc.static-path-pattern”用於闡述HTTP請求地址,而“spring.resources.static-locations”則用於描述靜態資源的存放位置。
注:
這裏特別說明下上述配置中提到的classpath。SpringBoot項目創建完成後,會生成該項目名稱+iml後綴的文件。該文件位於項目的根目錄下。打開後,在name="NewModuleRootManager"的component聲明中,會有幾個默認content聲明。其中sourceFolder 中聲明的就是classpath,只是類型不同。