靜態(tài)資源窖式,例如HTML文件蚁飒、JS文件,涉及到的Spring Boot配置有兩項萝喘,一是“spring.mvc.static-path-pattern”飒箭,一是“spring.resources.static-locations”。
“spring.mvc.static-path-pattern”用于闡述HTTP請求地址蜒灰,而“spring.resources.static-locations”則用于描述靜態(tài)資源的存放位置弦蹂。
- “spring.mvc.static-path-pattern”
spring.mvc.static-path-pattern代表的含義是我們應(yīng)該以什么樣的路徑來訪問靜態(tài)資源,換句話說强窖,只有靜態(tài)資源滿足什么樣的匹配條件凸椿,Spring Boot才會處理靜態(tài)資源請求,以官方配置為例:
# 這表示只有靜態(tài)資源的訪問路徑為/resources/**時翅溺,才會處理請求
spring.mvc.static-path-pattern=/resources/**脑漫,
- “spring.resources.static-locations”
“spring.resources.static-locations”用于告訴Spring Boot應(yīng)該在何處查找靜態(tài)資源文件,這是一個列表性的配置咙崎,查找文件時會依賴于配置的先后順序依次進(jìn)行优幸,默認(rèn)的官方配置如下:
spring.resources.static-locations=classpath:/static,classpath:/public,classpath:/resources,classpath:/META-INF/resources
繼續(xù)以上面的請求地址為例,“http://localhost:8080/resources/jquery.js”就會在上述的四個路徑中依次查找是否存在“jquery.js”文件褪猛,如果找到了网杆,則返回此文件,否則返回404錯誤伊滋。
默認(rèn)Springboot將從如下位置按如下順序加載jar包對應(yīng)前端靜態(tài)資源:
1.jar包同級static目錄
2.jar包同級public目錄
3.jar包同級resource目錄
4.jar包/META-INF/resources
在調(diào)試模式下碳却,Springboot將從class目錄中按如下順序加載對應(yīng)前端靜態(tài)資源
1.class目錄下static目錄
2.class目錄下public目錄
3.class目錄下resource目錄
4.class目錄下/META-INF/resources
通過設(shè)置spring.resources.static-locations自定義Spring boot加載前端靜態(tài)資源路徑
spring.resources.static-locations: file:D:/public/
亦可以指定先后順序:
spring.resources.static-locations=classpath:/static,classpath:/public,classpath:/resources,classpath:/META-INF/resource
如果指定了攔截器,該屬性有可能失效
需要在攔截器ResourceHandlerRegistry中通過addLocations()指定對應(yīng)路徑笑旺。
- 靜態(tài)資源的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>
參考:
https://blog.csdn.net/yiifaa/article/details/78299052
https://blog.csdn.net/newCheng/article/details/102740980