SpringBoot靜態(tài)資源映射規(guī)則淺析
1. 靜態(tài)資源映射規(guī)則
在項(xiàng)目中雙擊shift
或ctrl+N
搜索WebMvcAutoConfiguration.class
文件,文件中的addResourceHandlers方法如下:
public void addResourceHandlers(ResourceHandlerRegistry registry) { if (!this.resourceProperties.isAddMappings()) { logger.debug("Default resource handling disabled"); } else { this.addResourceHandler(registry, "/webjars/**", "classpath:/META-INF/resources/webjars/"); this.addResourceHandler(registry, this.mvcProperties.getStaticPathPattern(), (registration) -> { registration.addResourceLocations(this.resourceProperties.getStaticLocations()); if (this.servletContext != null) { ServletContextResource resource = new ServletContextResource(this.servletContext, "/"); registration.addResourceLocations(new Resource[]{resource}); } }); } }
隨后進(jìn)入到getStaticLocations()
方法可以發(fā)現(xiàn)變量 staticLocations 的取值如下:
"classpath:/META-INF/resources/"
"classpath:/resources/"
"classpath:/static/"
"classpath:/public/"
即項(xiàng)目運(yùn)行時(shí)會(huì)到上述路徑下尋找靜態(tài)資源,也可以自定義靜態(tài)資源路徑,需在 application.properties 中配置:
spring.resources.static-locations=classpath:/folder1/,classpath:/folder2/
注:一旦自定義了靜態(tài)文件夾的路徑,則默認(rèn)的靜態(tài)資源路徑就會(huì)失效。
2. 歡迎頁(yè)
靜態(tài)資源路徑下的 index.html 文件會(huì)被/**
所映射,當(dāng)訪(fǎng)問(wèn)http://localhost:8080/時(shí) ,會(huì)默認(rèn)映射到靜態(tài)資源文件夾下的 index.html。
遇到的問(wèn)題
新建 index.html 文件后運(yùn)行項(xiàng)目,訪(fǎng)問(wèn)http://localhost:8080/時(shí)會(huì)頁(yè)面錯(cuò)誤:
控制臺(tái)報(bào)如下錯(cuò)誤:
Spring Boot 的版本是 2.7.8,tomcat 的版本是 9.0.71。Spring Boot 通過(guò)內(nèi)嵌的 tomcat 來(lái)運(yùn)行項(xiàng)目,但需要依靠本地的 java 環(huán)境,我本地的 java 版本是 Java 1.8.0_261(即 java 8 版本),一般 java 8 和 tomcat 8.x.x 配套使用,這里可能是版本沖突導(dǎo)致的問(wèn)題。將項(xiàng)目的 SDK 改為jbr-11 JetBrains Runtime version 11.0.10
即可解決問(wèn)題:
JetBrains Runtime 可以認(rèn)為是 IDEA 自帶的 java 運(yùn)行環(huán)境。
到此這篇關(guān)于SpringBoot靜態(tài)資源映射規(guī)則淺析的文章就介紹到這了,更多相關(guān)SpringBoot靜態(tài)資源映射內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
通過(guò)Class類(lèi)獲取對(duì)象(實(shí)例講解)
下面小編就為大家?guī)?lái)一篇通過(guò)Class類(lèi)獲取對(duì)象(實(shí)例講解)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-06-06SpringBoot服務(wù)上實(shí)現(xiàn)接口限流的方法
這篇文章主要介紹了SpringBoot服務(wù)上實(shí)現(xiàn)接口限流的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-10-10java中Integer包裝類(lèi)裝箱的一個(gè)細(xì)節(jié)詳解
Java中的Integer是int的包裝類(lèi)型,下面這篇文章主要給大家介紹了關(guān)于java中Integer包裝類(lèi)裝箱的一個(gè)細(xì)節(jié)的相關(guān)資料,文中介紹的這個(gè)細(xì)節(jié)挺重要的,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起看看吧2018-07-07JAVA之讀取properties時(shí)路徑的注意問(wèn)題
這篇文章主要介紹了JAVA之讀取properties時(shí)路徑的注意問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08SpringBoot+MyBatis實(shí)現(xiàn)MD5加密數(shù)據(jù)庫(kù)用戶(hù)密碼的方法
MD5技術(shù)主要用于對(duì)用戶(hù)密碼加密,增加賬戶(hù)的安全性,他具有不可逆的特性,不會(huì)被輕易解密,這篇文章給大家介紹SpringBoot+MyBatis實(shí)現(xiàn)MD5加密數(shù)據(jù)庫(kù)用戶(hù)密碼的方法,感興趣的朋友跟隨小編一起看看吧2024-03-03java 根據(jù)前端返回的字段名進(jìn)行查詢(xún)數(shù)據(jù)
本文介紹了如何在Java中使用SpringDataJPA實(shí)現(xiàn)動(dòng)態(tài)查詢(xún)功能,以便根據(jù)前端傳遞的字段名動(dòng)態(tài)構(gòu)建查詢(xún)語(yǔ)句,通過(guò)創(chuàng)建實(shí)體類(lèi)、Repository接口、構(gòu)建動(dòng)態(tài)查詢(xún)、在Service層和Controller中使用動(dòng)態(tài)查詢(xún),實(shí)現(xiàn)了前后端分離架構(gòu)中的靈活查詢(xún)需求2024-11-11java Socket實(shí)現(xiàn)網(wǎng)頁(yè)版在線(xiàn)聊天
這篇文章主要為大家詳細(xì)介紹了java Socket實(shí)現(xiàn)網(wǎng)頁(yè)版在線(xiàn)聊天具體代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-05-05springboot遠(yuǎn)程執(zhí)行服務(wù)器指令
這篇文章主要介紹了springboot遠(yuǎn)程執(zhí)行服務(wù)器指令,本例是java遠(yuǎn)程連接到服務(wù)器,去抓取查詢(xún)kubesphere中的etcd日志,并返回,需要的朋友可以參考下2023-09-09