springboot靜態(tài)資源映射規(guī)則的使用小結(jié)
SpringBoot 對(duì)靜態(tài)資源的訪問(wèn)提供了自動(dòng)配置支持,核心依賴是 WebMvcAutoConfiguration 自動(dòng)配置類,其底層通過(guò)重寫 addResourceHandlers 方法,借助 ResourceHandlerRegistry(資源處理器注冊(cè)器)注冊(cè)多個(gè) ResourceHandler(資源處理器),分別定義了普通靜態(tài)資源和 WebJars 資源的存放路徑與 URL 訪問(wèn)路徑映射關(guān)系,同時(shí)遵循 Controller 映射優(yōu)先級(jí)高于靜態(tài)資源映射的規(guī)則,確保請(qǐng)求匹配的合理性。
springboot靜態(tài)資源映射規(guī)則源碼解析
首先我們找到 spring-boot-autoconfigure 的jar包,點(diǎn)擊 spring.factories 文件,找到 org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration,
進(jìn)入 WebMvcAutoConfiguration 核心配置類

SpringBoot 之所以能訪問(wèn)到靜態(tài)資源,本質(zhì)是 WebMvcAutoConfiguration 自動(dòng)配置類中,通過(guò) addResourceHandlers 方法注冊(cè)了默認(rèn)的資源處理器

下面具體簡(jiǎn)述該函數(shù)代碼
第一部分:加載緩存配置

點(diǎn)擊進(jìn)入 ResourceProperties

這是靜態(tài)資源相關(guān)配置的綁定類,可以在 application.yml/properties 靜態(tài)資源配置中進(jìn)行設(shè)置和靜態(tài)資源有關(guān)的參數(shù),包括緩存時(shí)間等
第二部分:注冊(cè) WebJars 專用資源處理器

Webjars 是以 jar 包的方式引入靜態(tài)資源,Webjars 的網(wǎng)址為 https://www.webjars.org/
由代碼可知所有以 /webjars/ 開(kāi)頭的請(qǐng)求都會(huì)被該處理器處理,WebJars 組件的 Jar 包中靜態(tài)資源默認(rèn)存放在 classpath:META-INF/resources/webjars/ 目錄下
下面以引入 jQuery 為例進(jìn)行演示
使用方式是導(dǎo)入 org.webjars 的相關(guān)依賴
<dependency>
<groupId>org.webjars</groupId>
<artifactId>jquery</artifactId>
<version>3.3.1</version>
</dependency>

訪問(wèn)方式是訪問(wèn) classpath:META-INF/resources/webjars/ 目錄下的內(nèi)容,例如訪問(wèn) jquery 的路徑為:localhost:8080/webjars/jquery/3.3.1/jquery.js

第三部分是:注冊(cè)普通靜態(tài)資源處理器

點(diǎn)擊 getStaticPathPattern 函數(shù)進(jìn)入 WebMvcProperties 類中,里面 staticPathPattern 注冊(cè) URL 訪問(wèn)路徑模式,默認(rèn)是 /**(所有未被 Controller 處理的請(qǐng)求),可通過(guò)配置修改

點(diǎn)擊 getStaticLocations 函數(shù)進(jìn)入 ResourceProperties 類中,里面 staticLocations 讀取默認(rèn) / 自定義的靜態(tài)資源目錄,默認(rèn)值為四個(gè)目錄

優(yōu)先級(jí)從高到低(同名文件會(huì)優(yōu)先訪問(wèn)優(yōu)先級(jí)高的目錄):
靜態(tài)資源 classpath:/META-INF/resources/,即項(xiàng)目?jī)?nèi)實(shí)際存放路徑 src/main/resources/META-INF/resources/
靜態(tài)資源 classpath:/resources/,即項(xiàng)目?jī)?nèi)實(shí)際存放路徑 src/main/resources/resources/
靜態(tài)資源 classpath:/static/,即項(xiàng)目?jī)?nèi)實(shí)際存放路徑 src/main/resources/static/
靜態(tài)資源 classpath:/public/,即項(xiàng)目?jī)?nèi)實(shí)際存放路徑 src/main/resources/public/
下面我們來(lái)看在 WebMvcAutoConfiguration 自動(dòng)配置類中 SpringBoot 的默認(rèn)歡迎頁(yè)的自動(dòng)配置核心
welcomePageHandlerMapping 函數(shù)專門處理歡迎頁(yè)的 HandlerMapping

getWelcomePage() 函數(shù)用于查找靜態(tài)資源目錄和模板目錄下的 index.html,嚴(yán)格遵循靜態(tài)資源默認(rèn)目錄優(yōu)先級(jí)進(jìn)行查找,只要其中任意一個(gè)目錄下有 index.html,就返回該資源路徑。
另外,如果通過(guò) spring.web.resources.staticLocations 自定義了靜態(tài)資源目錄,getWelcomePage() 也會(huì)在自定義目錄中查找 index.html

由代碼可知這個(gè)方法的本質(zhì)是向 SpringMVC 容器注冊(cè)一個(gè) WelcomePageHandlerMapping 實(shí)例,它是一個(gè)請(qǐng)求處理器映射器(HandlerMapping),專門處理根路徑(/)請(qǐng)求,自動(dòng)查找并返回項(xiàng)目中的 index.html 作為歡迎頁(yè)。
訪問(wèn) http://localhost:8080/ 自動(dòng)打開(kāi)歡迎頁(yè)的效果

到此這篇關(guān)于springboot靜態(tài)資源映射規(guī)則的使用小結(jié)的文章就介紹到這了,更多相關(guān)springboot靜態(tài)資源映射規(guī)則內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java日期格式化之IllegalArgumentException與MySQL數(shù)據(jù)截?cái)鄦?wèn)題解決
在Java開(kāi)發(fā)中,日期時(shí)間處理和數(shù)據(jù)庫(kù)字段映射是常見(jiàn)的任務(wù),但也容易遇到各種問(wèn)題,譬如IllegalArgumentException與MySQL數(shù)據(jù)截?cái)鄦?wèn)題,下面我們就來(lái)看看他們的具體解決方法吧2025-07-07
Java版仿QQ驗(yàn)證碼風(fēng)格圖片驗(yàn)證碼
這篇文章主要為大家分享了java圖片驗(yàn)證碼實(shí)例代碼,感興趣的小伙伴們可以參考一下2016-04-04
非常實(shí)用的java自動(dòng)答題計(jì)時(shí)計(jì)分器
這篇文章主要為大家詳細(xì)介紹了非常實(shí)用的java自動(dòng)答題計(jì)時(shí)計(jì)分器的實(shí)現(xiàn)方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-01-01
SpringCloud中的斷路器(Hystrix)和斷路器監(jiān)控(Dashboard)
本篇主要介紹的是SpringCloud中的斷路器(Hystrix)和斷路器指標(biāo)看板(Dashboard)的相關(guān)使用知識(shí),需要的朋友可以參考下2019-06-06
idea左側(cè)的commit框設(shè)置顯示出來(lái)方式
在IDEA中顯示左側(cè)的commit框,首先通過(guò)File-Settings-Version Control-Commit進(jìn)行設(shè)置,然后勾選Use non-modal commit interface完成2025-01-01
Springboot重寫addInterceptors()方法配置攔截器實(shí)例
這篇文章主要介紹了Springboot重寫addInterceptors()方法配置攔截器實(shí)例,spring?boot拋棄了復(fù)雜的xml配置,我們可以自定義配置類(標(biāo)注@Configuration注解的類)來(lái)實(shí)現(xiàn)WebMvcConfigurer接口,并重寫addInterceptors()方法來(lái)配置攔截器,需要的朋友可以參考下2023-09-09
解決@Transactional注解事務(wù)不回滾不起作用的問(wèn)題
這篇文章主要介紹了解決@Transactional注解事務(wù)不回滾不起作用的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-02-02
JAVA序列化和反序列化的底層實(shí)現(xiàn)原理解析
這篇文章主要介紹了JAVA序列化和反序列化的底層實(shí)現(xiàn)原理解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11

