亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

SpringBoot訪問靜態(tài)資源的配置及順序說明

 更新時間:2022年03月21日 09:07:29   作者:zzzgd816  
這篇文章主要介紹了SpringBoot訪問靜態(tài)資源的配置及順序說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

訪問靜態(tài)資源的配置及順序

今天在玩SpringBoot的demo的時候,放了張圖片在resources目錄下,啟動區(qū)訪問的時候,突然好奇是識別哪些文件夾來展示靜態(tài)資源的, 為什么有時候放的文件夾不能顯示,有的卻可以.

1. SpringBoot的默認(rèn)配置

首先我們打開WebMvcAutoConfiguration類, 因?yàn)槭庆o態(tài)資源的位置, 所以搜索location,找到這一行代碼:

?String staticPathPattern = this.mvcProperties.getStaticPathPattern();
? ? if (!registry.hasMappingForPattern(staticPathPattern)) {
? ? ? this.customizeResourceHandlerRegistration(registry.addResourceHandler(new String[]{staticPathPattern}).addResourceLocations(getResourceLocations(this.resourceProperties.getStaticLocations())).setCachePeriod(this.getSeconds(cachePeriod)).setCacheControl(cacheControl));
? ? }

然后進(jìn)入getStaticLocations這個方法,到了ResourceProperties類中的

? public String[] getStaticLocations() {
? ? return this.staticLocations;
? }

這個方法,那接著看staticLocations這個屬性,其實(shí)就到了這個類的頂部

public class ResourceProperties {
? private static final String[] CLASSPATH_RESOURCE_LOCATIONS = new String[]{"classpath:/META-INF/resources/", "classpath:/resources/", "classpath:/static/", "classpath:/public/"};
? private String[] staticLocations;
? private boolean addMappings;
? private final ResourceProperties.Chain chain;
? private final ResourceProperties.Cache cache;
? public ResourceProperties() {
? ? this.staticLocations = CLASSPATH_RESOURCE_LOCATIONS;
? ? this.addMappings = true;
? ? this.chain = new ResourceProperties.Chain();
? ? this.cache = new ResourceProperties.Cache();
? }
...
}

可以看出,靜態(tài)資源默認(rèn)的位置是classpath,也就是resource目錄下的:

  • /META-INF/resources
  • /resources
  • /static
  • /public

而且順序就是數(shù)組的順序.

2. 測試

我們創(chuàng)建一個index.html頁面,然后<h1>標(biāo)簽分別是各自的路徑,比如在/META-INF/resources下的index.html:

<!DOCTYPE html >
<html>
<head lang="en">
? ? <meta charset="UTF-8" />
? ? <title>http-template</title>
</head>
<body>
<h1 >META-INF.resources</h1>
</body>
</html>

在上面四個文件夾中各自放一個不同標(biāo)題的頁面,啟動springboot,訪問localhost:8080

可以看到頁面的標(biāo)題是/META-INF/resources, 說明是按照上面的默認(rèn)配置讀取順序讀取的

注意,這里不需要加這個靜態(tài)資源文件夾的名字!!,比如localhost:8080能看到頁面,但是localhost:8080/static或localhost:8080/META-INF/resources是訪問不了的

為了繼續(xù)證實(shí)四個文件夾都可以,我放了同一個圖片在各自文件夾,只是名字不同,結(jié)構(gòu)如下:

訪問

  • localhost:8080/2b.jpg
  • localhost:8080/3b.jpg
  • localhost:8080/4b.jpg
  • localhost:8080/5b.jpg

都能訪問(不需要加靜態(tài)資源文件夾的名字!!!), 反而是resource根目錄,也就是classpath下的1b.jpg不能訪問

3.配置

配置一: 是否可以訪問靜態(tài)資源

spring:
  mvc:
    static-path-pattern: /static/**

這個配置默認(rèn)是/**, 表示的是正則匹配到這種路徑才去訪問靜態(tài)資源,所以默認(rèn)情況下,上面四個能夠訪問的路徑也必須加上/zgd才可以訪問

另一個需要注意的事,默認(rèn)情況下訪問index.html頁面,不需要加這個文件名,比如localhost:8080,但是配置了該項(xiàng)后,需要文件名.localhost:8080/zgd/index.html

加上index.html資源全稱后可以訪問

配置二: 去哪找靜態(tài)資源

這個配置就是我們上面說的那四個文件夾的配置了,注釋掉上面的配置,啟動看看

spring:
  resources:
    static-locations: classpath:/static/

啟動訪問localhost:8080

不出意料的顯示的是static的標(biāo)題,也就是static文件夾下的html文件.

此時嘗試訪問3b.jpg,4b.jpb都是無法訪問的,只能訪問2b.jpg

靜態(tài)資源的配置心得

在springboot的application.properties中,下面2個配置是配置靜態(tài)資源的。

# 默認(rèn)值為    /**
spring.mvc.static-path-pattern=
# 默認(rèn)值為   classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/ 
spring.resources.static-locations=這里設(shè)置要指向的路徑,多個使用英文逗號隔開

上面的那個是匹配規(guī)則,換句話說,只有靜態(tài)資源滿足什么樣的匹配條件,Spring Boot才會處理靜態(tài)資源請求。

下面的是匹配后指向的路徑。也就是說 ,這個配置項(xiàng)是告訴springboot去哪找資源。

舉例

spring.mvc.static-path-pattern=/gw/**

如果原先訪問首頁的地址是:http://localhost:8080/index.html,那么在你配置這個配置后,上面的訪問就失效了,現(xiàn)在訪問同樣的頁面需要這樣訪問:http://localhost:8888/gw/index.html

配置訪問路徑為/gw/后原本可以訪問resources下其他文件夾的目錄下的靜態(tài)資源,現(xiàn)在不可以了。

比如下面截圖中pay.html不能訪問了,在沒有配置為/static/可以通過http://localhost:8080/pay.html訪問,注意地址欄。(測試時,spring.mvc.static-path-pattern=/static/**) 

實(shí)際springboot項(xiàng)目,一般會將js、css等靜態(tài)文件放在static下,而將頁面放在templates下。

         

使用:

以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論