javascript
Spring Boot静态资源访问和配置全解析
在web開發中,靜態資源的訪問時必不可少的,比如image、css、js等。SpringBoot對靜態資源訪問提供了很好的支持,使用其提供的基本默認配置基本可以滿足開發需求,同時,又支持開發人員進行自定義配置。
一、默認靜態資源映射規則
Spring Boot 默認將 / 所有訪問映射到以下目錄:**
classpath:/static classpath:/public classpath:/resources classpath:/META-INF/resources接下來,在main/resources下新建static、public和resources三個文件夾,分別放入a.png、b.png和c.png三張圖片,如下:
這里寫圖片描述
啟動項目,分別訪問:
發現都能正常訪問相應的圖片資源。那么說明,Spring Boot 默認會挨個從 public、resources和static 里面找是否存在相應的資源,如果有則直接返回。
二、自定義靜態資源映射規則
追溯源碼發現,在WebMvcAutoConfiguration類中,有如下代碼:
public void addResourceHandlers(ResourceHandlerRegistry registry) {if(!this.resourceProperties.isAddMappings()) {logger.debug("Default resource handling disabled");} else {Duration cachePeriod = this.resourceProperties.getCache().getPeriod();CacheControl cacheControl = this.resourceProperties.getCache().getCachecontrol().toHttpCacheControl();if(!registry.hasMappingForPattern("/webjars/**")) {this.customizeResourceHandlerRegistration(registry.addResourceHandler(new String[]{"/webjars/**"}).addResourceLocations(new String[]{"classpath:/META-INF/resources/webjars/"}).setCachePeriod(this.getSeconds(cachePeriod)).setCacheControl(cacheControl));} // 此處做的就是靜態資源文件夾映射String staticPathPattern = this.mvcProperties.getStaticPathPattern();if(!registry.hasMappingForPattern(staticPathPattern)) {this.customizeResourceHandlerRegistration(registry.addResourceHandler(new String[]{staticPathPattern}).addResourceLocations(getResourceLocations(this.resourceProperties.getStaticLocations())).setCachePeriod(this.getSeconds(cachePeriod)).setCacheControl(cacheControl));}}}通過追溯staticPathPattern,在ResourceProperties類中,發現如下常量信息被設置:
private static final String[] CLASSPATH_RESOURCE_LOCATIONS = new String[]{"classpath:/META-INF/resources/", "classpath:/resources/", "classpath:/static/", "classpath:/public/"};到此,就可以發現,這就是Spring Boot為我們提供的默認靜態資源映射,那么自定義映射規則的話,繼承WebMvcConfigurer即可。如下:
@Configuration public class MyWebMvcConfig implements WebMvcConfigurer {@Overridepublic void addResourceHandlers(ResourceHandlerRegistry registry) {// 將/static/**訪問映射到classpath:/mystatic/registry.addResourceHandler("/static/**").addResourceLocations("classpath:/mystatic/");} }在main/resources下新建mystatic文件夾,并放入d.png圖片。
啟動項目,訪問如下鏈接:
http://localhost:8083/static/d.png
發現,可以正常請求d.png圖片。
2.2.1 配置靜態資源訪問路徑
在application.properties中配置如下:
重啟項目,再訪問靜態資源,需要以mystatic開頭,如下:
http://localhost:8083/mystatic/a.png
這樣,仍可以訪問之前的a b c三張圖片。如果按照之前http://localhost:8083/a.png就不能再訪問到了。
2.2.2 配置靜態資源目錄
在application.properties中,增加如下配置:
重啟項目,訪問:
http://localhost:8083/mystatic/a.png
發現可以正常訪問,同理,mystatic和static中靜態資源都可以正常訪問。
但當訪問resources和static里靜態資源時,就會404報錯,訪問不到了,這個是因為配置文件中如果進行了靜態資源路徑的配置,那么默認的配置就失效了。
總結
以上是生活随笔為你收集整理的Spring Boot静态资源访问和配置全解析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用easyexcel导入时间数据转换成
- 下一篇: 互联网晚报 | 1月29日 星期六 |