SpringBoot處理靜態資源
靜態資源
WebMvcAutoConfiguration.class配置類中的addResourceHandlers方法的原始碼
WebMvcAutoConfiguration.java原始碼中找到addResourceHandlers方法
public void addResourceHandlers(ResourceHandlerRegistry registry) {
//this.resourceProperties.isAddMappings()如果對resourceProperties進行配置,那麼就會禁用預設資源處理
//resourceProperties.isAddMappings() 預設為true
if (!this.resourceProperties.isAddMappings()) {
logger.debug("Default resource handling disabled");
return;
}
//獲取快取配置的資源處理程式提供的資源快取週期。
Duration cachePeriod = this.resourceProperties.getCache().getPeriod();
//getCache().getCachecontrol()快取控制HTTP頭配置
//以下一段是將classpath:/META-INF/resources/webjars/對映為/webjars/**
//只要存在/META-INF/resources/webjars/都可以通過/webjars/**進行訪問
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[] staticLocations ={ "classpath:/META-INF/resources/","classpath:/resources/", "classpath:/static/", "classpath:/public/" }
//以下這段程式碼可以通過"/**"訪問staticLocations包含 的路徑下去找資源
//資源訪問存在優先順序
String staticPathPattern = this.mvcProperties.getStaticPathPattern();
if (!registry.hasMappingForPattern(staticPathPattern)) {
customizeResourceHandlerRegistration(registry.addResourceHandler(staticPathPattern)
.addResourceLocations(getResourceLocations(this.resourceProperties.getStaticLocations()))
.setCachePeriod(getSeconds(cachePeriod)).setCacheControl(cacheControl));
}
}
123456789101112131415161718192021222324252627282930
springboot中使用webjars載入靜態資源
首先需要去webjars(https://www.webjars.org/)網站,然後搜maven依賴,把maven依賴加入到springboot專案的pom.xml檔案中,
網站如下圖
然後成功把座標加入到pom.xml檔案中的依賴後會在專案中出現以下的這個包如圖
然後去WebMvcAutoConfiguration.class配置類中addResourceHandlers方法,如下圖
這樣我們訪問下面圖片中的路徑的時候,
比如想訪問jquery.js靜態資源,那麼可以直接寫介面localhost:8080/webjars/jquery/3.4.1/jquery.js,需要注意的是我們原始碼中是把/webjars路徑代替classpath:/resources/webjars路徑,並沒有連同後面的/jquery/3.4.1路徑,因此後面的寫介面的時候webjars/後面一定要加上/jquery/3.4.1即localhost:8080/webjars/jquery/3.4.1/jquery.js。
用webjars處理靜態資源的這種方式不常用,常用的是通過靜態位置staticLocations來處理靜態資源,也即是把靜態資源直接放進特定名稱的目錄裡面,然後就可以直接訪問了。
springboot中使用staticLocations載入靜態資源
從上面的5張圖片可以得出一個結論,路徑/可以代替classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,
classpath:/public這四個靜態路徑。
這四個靜態路徑的優先順序:/META-INF/resources/>/resources>/static(預設)>/public
如上圖是resources根目錄下的四個靜態目錄,這四個靜態目錄裡面都有一個名字為hello.js的靜態檔案,然後通過瀏覽器訪問介面
localhost:8080/hello.js訪問的是優先順序最高的靜態目錄裡面的檔案,也即是META-INF/resources/hello.js
使用靜態資源注意事項
使用靜態資源的目錄的時候,假設把所有的靜態檔案都放入了classpath:/static靜態資料夾下,加入有一個靜態檔案是hello.js,然後正常情況下,
即沒有對resourceProperties進行配置的時候,可以在瀏覽器中使用localhost:8080/hello.js介面可以生效,但是如果在配置檔案中對resourceProperties進行了配置,如下圖
那麼再次訪問靜態資源時就要用localhost:8080/static/hello.js介面了,如果仍是用localhost:8080/hello.js介面會出錯。
WebMvcAutoConfiguration都可以在配置檔案中配置什麼資訊怎麼看
找到WebMvcAutoConfiguration.class配置類中@EnableConfigurationProperties({WebMvcProperties.class})註解,然後點選WebMvcProperties.class類,結合這個類裡面的@ConfigurationProperties(prefix=“spring.mvc”)和這個類中的屬性的名字可以知道
配置檔案中能配置的與Web模組相關的配置資訊就是spring.mvc…
其中WebMvcProperties.class類中有一個屬性就是spring.mvc.static-path-pattern如果此屬性在配置檔案中配置了,如上圖中的情況,那麼訪問靜態資源的介面就不再是localhost:8080/了。
相關文章
- SpringBoot靜態資源訪問Spring Boot
- [譯]未雨綢繆之:靜態資源處理
- Springboot中如何訪問靜態資源Spring Boot
- Flutter-靜態資源和專案圖片的處理Flutter
- springboot+themeleaf+bootstrap訪問靜態資源/無法訪問靜態資源/圖片Spring Boot
- SpringBoot-靜態資源載入-原始碼Spring Boot原始碼
- springboot新增靜態資源無法訪問Spring Boot
- 八、SpringMVC--SpringMVC 表單標籤 和處理靜態資源SpringMVC
- SpringBoot - 搭建靜態資源儲存伺服器Spring Boot伺服器
- SpringBoot2 整合FreeMarker模板,完成頁面靜態化處理Spring Boot
- SpringBoot之yaml語法及靜態資源訪問Spring BootYAML
- springboot專案所有靜態資源無法載入Spring Boot
- springboot設定靜態資源不攔截的方法Spring Boot
- 靜態資源管理
- 靜態資源公共庫
- Web靜態資源加速Web
- webpack 靜態資源管理Web
- WPF:靜態、動態資源以及資源詞典
- 影片美顏SDK動態處理技術與靜態處理技術
- python指令碼處理偽靜態注入Python指令碼
- WordPress引用靜態資源方法
- 008.Nginx靜態資源Nginx
- Node讀取靜態資源
- 靜態資源伺服器伺服器
- Laravel 專案 偽靜態分頁處理Laravel
- 3、python指令碼處理偽靜態注入Python指令碼
- 【Nginx】Nginx部署前端靜態資源Nginx前端
- 如何在nginx配置靜態資源Nginx
- Spring Boot 靜態資源配置 A卷Spring Boot
- django-驗證碼/靜態檔案處理Django
- Centos7 配置靜態ip及問題處理CentOS
- WPF筆記4——靜態資源(StaticResource)筆記
- Golang 非主流 打包靜態資源方案Golang
- asp .net core 靜態檔案資源
- Nginx靜態資源伺服器配置Nginx伺服器
- springboot統一異常處理及返回資料的處理Spring Boot
- ASP.NET Core靜態檔案處理原始碼探究ASP.NET原始碼
- web伺服器靜態資源下載Web伺服器