目錄???????
靜態(tài)文件
application設(shè)置方法
配置詳解
編寫配置
優(yōu)缺點(diǎn)
設(shè)置配置類方法
配置詳解
編寫配置
優(yōu)缺點(diǎn)
總結(jié)
靜態(tài)文件
????????靜態(tài)資源,一般是網(wǎng)頁(yè)端的:HTML文件、JavaScript文件和圖片。尤其是設(shè)置圖片的靜態(tài)資源,尤其重要:
這樣的靜態(tài)資源訪問(wèn)不會(huì)被Springboot所攔截處理(方便用于CDN加速):
????????雖然真實(shí)項(xiàng)目里,圖片可以直接存儲(chǔ)在對(duì)象存儲(chǔ)的存儲(chǔ)桶內(nèi)或者直接用Nginx進(jìn)行反代,但是一些小的靜態(tài)資源,直接Springboot規(guī)劃靜態(tài)資源,也是個(gè)不錯(cuò)的選擇。
????????Springboot內(nèi)設(shè)置靜態(tài)資源,或者說(shuō)靜態(tài)資源文件夾,主要有兩種方法(均為SpringMVC實(shí)現(xiàn)):
? ? ? ? ·在application.yml/application.properties內(nèi)配置。
? ? ? ? ·設(shè)置Configuration配置類。
更多內(nèi)容,可以參考Spring官方文檔:www.baeldung.com/spring-mvc-…
以上兩種方法,均可實(shí)現(xiàn)用戶訪問(wèn)網(wǎng)址,不走Controller層的攔截,直接進(jìn)行靜態(tài)文件訪問(wèn):
application設(shè)置方法
配置詳解
設(shè)置application方法很簡(jiǎn)單,主要涉及兩個(gè)配置項(xiàng):
? ? ? ? ·spring.mvc.static-path-pattern:
? ? ? ? - 根據(jù)官網(wǎng)的描述和實(shí)際效果,可以理解為靜態(tài)文件URL匹配頭,也就是靜態(tài)文件的URL地址開(kāi)頭。Springboot默認(rèn)為:/**。
? ? ? ? ·spring.web.resources.static-locations:
? ? ? ? - 根據(jù)官網(wǎng)的描述和實(shí)際效果,可以理解為實(shí)際靜態(tài)文件地址,也就是靜態(tài)文件URL后,匹配的實(shí)際靜態(tài)文件。
? ? ? ? -Springboot默認(rèn)為:
classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/
如何運(yùn)作的?,這里我畫個(gè)簡(jiǎn)單的圖:
需要注意:
- spring.web.resources.static-locations是后續(xù)配置,舊版Springboot的配置項(xiàng)為:spring-resources-static-locations;在2.2.5版本之后,舊版本配置已經(jīng)失效。
- spring.web.resources.static-locations有多個(gè)配置項(xiàng),在Springboot編譯后,會(huì)合并為一個(gè)文件。多個(gè)配置文件,使用,進(jìn)行分割。
- spring.web.resources.static-location僅僅允許一個(gè)配置,無(wú)法使用,進(jìn)行分割,如果需要多個(gè)靜態(tài)資源文件,可以使用下文的配置類方法。
- spring.web.resources.static-locations可以使用classpath、file進(jìn)行匹配。如果使用file,這個(gè)時(shí)候的相對(duì)路徑為項(xiàng)目地址(打包為.jar后,相對(duì)路徑就是.jar運(yùn)行地址)。
編寫配置
現(xiàn)在,官方描述,我們已經(jīng)知道了配置項(xiàng)的含義?,F(xiàn)在我們就來(lái)配置。
我使用的是YML格式的application配置,如果你是使用XML格式的application.properties,記得進(jìn)行更改。
最終效果很簡(jiǎn)單,我想要的效果: 瀏覽器輸入:http://localhost:8088/SystemData/UserData/Avatar/Mintimate.jpeg 可以直接訪問(wèn)項(xiàng)目文件下的:/SystemData/UserData/Avatar/Mintimate.jpeg
為了實(shí)現(xiàn)這樣的效果,我們編寫配置文件:
spring:
mvc:
# URL響應(yīng)地址(Springboot默認(rèn)為/**)
static-path-pattern: /SystemData/**
web:
resources:
# 靜態(tài)文件地址,保留官方內(nèi)容后,進(jìn)行追加
static-locations:
classpath:/static,classpath:/public,classpath:/resources,classpath:/META-INF/resources,file:SystemData
其中,file:SystemData就是映射本地文件了。
這樣的配置,類似于Nginx的正則匹配:
location ^~/SystemData{ alias /www/myWeb/SystemData;}
這樣,我們運(yùn)行項(xiàng)目,就可以直接訪問(wèn)靜態(tài)資源了:
當(dāng)然,這樣有一些缺點(diǎn)……
優(yōu)缺點(diǎn)
這樣的配置,可以說(shuō)最簡(jiǎn)單且粗暴,但是靈活性差一點(diǎn)點(diǎn):
? ? ? ? ·URL響應(yīng)地址只能為一項(xiàng),也就是spring.mvc.static-path-pattern配置只能寫一項(xiàng)。
????????這意味著,按我上文設(shè)置了/SystemData/**為URL匹配,就不能設(shè)置第二個(gè)/resources/**這樣的配置為第二靜態(tài)目錄。
如果需要設(shè)置多個(gè)地址為靜態(tài)資源目錄,可以參考下文的設(shè)置配置類方法方法。
設(shè)置配置類方法
配置詳解
寫一個(gè)配置類,實(shí)現(xiàn)靜態(tài)資源的文件夾方法很多。比如:
- 繼承于WebMvcConfigurationSupport父類,并實(shí)現(xiàn)addResourceHandlers方法。
- 引用WebMvcConfigurer接口,并實(shí)現(xiàn)addInterceptors方法
一些文章可能會(huì)讓你繼承于WebMvcConfigurerAdapter方法,但是實(shí)際上WebMvcConfigurerAdapter方法在Spring5.0和Springboot2.0之后,已經(jīng)棄用。
這里,我處于習(xí)慣,就使用WebMvcConfigurationSupport進(jìn)行實(shí)現(xiàn)addResourceHandlers:
@Override
protected void addResourceHandlers(ResourceHandlerRegistry registry) {
}
這里的registry使用鏈?zhǔn)骄幊?方法為:
- addResourceHandler:添加URL響應(yīng)地址目錄。
- addResourceLocations:添加實(shí)際資源目錄。
????????和application.yml里設(shè)置一樣,支持classpath和file等關(guān)鍵詞。接下來(lái),我們就看看實(shí)際編寫配置。
編寫配置
現(xiàn)在我們就來(lái)配置。 最終效果很簡(jiǎn)單,我想要的效果(兩組同時(shí)):
- 瀏覽器輸入:http://localhost:8088/SystemData/UserData/Avatar/Mintimate.jpeg
- 可以直接訪問(wèn)項(xiàng)目文件下的:/SystemData/UserData/Avatar/Mintimate.jpeg,
- 瀏覽器輸入:http://localhost:8088/SystemDataTest/UserData/Avatar/Mintimate.jpeg
- 可以直接訪問(wèn)項(xiàng)目文件下的:/Test/UserData/Avatar/Demo.jpeg,
????????添加一個(gè)配置類,并繼承WebMvcConfigurationSupport,實(shí)現(xiàn)addResourceHandlers方法,并打上@Configuration注解,使其成為配置類:
之后,重寫內(nèi)容:
主要是:
// 靜態(tài)資源映射
registry
.addResourceHandler("/SystemData/**")
.addResourceLocations("file:"+IMG_PATH);
registry
.addResourceHandler("/SystemDataTest/**")
.addResourceLocations("file:"+IMG_PATH_TWO);
之后,瀏覽器就可以訪問(wèn)了:
這樣的配置,其實(shí)還是和Nginx配置類是……: 這樣的配置,類似于Nginx的正則匹配:
location ^~/SystemData{ alias /www/myWeb/SystemData;}
當(dāng)然,這樣的優(yōu)缺點(diǎn)……
優(yōu)缺點(diǎn)
相比前文的配置,這樣優(yōu)缺點(diǎn)很明顯:
- 相比前文,這樣的配置更麻煩。
- 相比前文,這樣的可塑性更高:可以添加更多的映射、不會(huì)對(duì)默認(rèn)配置造成覆蓋等。
總結(jié)
????????綜上所述,就是Springboot的靜態(tài)資源目錄添加方法啦。是不是和Nginx很像?文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-557435.html
????????雖然現(xiàn)在Nginx和對(duì)象存儲(chǔ)都很方便,但是直接用Springboot進(jìn)行靜態(tài)資源的劃分,也不為一種方法。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-557435.html
到了這里,關(guān)于Springboot設(shè)置并訪問(wèn)靜態(tài)資源目錄的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!