springboot靜態(tài)資源映射規(guī)則的使用小結(jié)
SpringBoot 對(duì)靜態(tài)資源的訪問(wèn)提供了自動(dòng)配置支持,核心依賴是 WebMvcAutoConfiguration 自動(dòng)配置類,其底層通過(guò)重寫(xiě) 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ù)專門(mén)處理歡迎頁(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),專門(mén)處理根路徑(/)請(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實(shí)現(xiàn)訂單超時(shí)自動(dòng)取消的7種方案
在電商、外賣、票務(wù)等系統(tǒng)中,訂單超時(shí)未支付自動(dòng)取消是一個(gè)常見(jiàn)的需求,這個(gè)功能乍一看很簡(jiǎn)單,甚至很多初學(xué)者會(huì)覺(jué)得:"不就是加個(gè)定時(shí)器么?" 但真到了實(shí)際工作中,細(xì)節(jié)的復(fù)雜程度往往會(huì)超乎預(yù)期,本文給大家介紹了Java實(shí)現(xiàn)訂單超時(shí)自動(dòng)取消的7種方案2024-12-12
Java中提供synchronized后為什么還要提供Lock
這篇文章主要介紹了Java中提供synchronized后為什么還要提供Lock,在Java中提供了synchronized關(guān)鍵字來(lái)保證只有一個(gè)線程能夠訪問(wèn)同步代碼塊,下文更多相關(guān)資料需要的小伙伴可以參考一下2022-03-03
Java使用MethodHandle來(lái)替代反射,提高性能問(wèn)題
這篇文章主要介紹了Java使用MethodHandle來(lái)替代反射,提高性能問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2025-05-05
Java項(xiàng)目開(kāi)發(fā)中最容易犯的10個(gè)錯(cuò)誤與解決
作為 Java 開(kāi)發(fā),我們?cè)趯?xiě)代碼的過(guò)程中難免會(huì)產(chǎn)生各種奇思妙想的 bug ,有些 bug 就挺讓人無(wú)奈的,下面小編就和大家詳細(xì)介紹一下如何避免吧2026-03-03
關(guān)于javaWeb中405錯(cuò)誤的解決方法
下面小編就為大家?guī)?lái)一篇關(guān)于javaWeb中405錯(cuò)誤的解決方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-05-05

