最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

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

首先我們打開(kāi)WebMvcAutoConfiguration類(lèi), 因?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這個(gè)方法,到了ResourceProperties類(lèi)中的

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

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

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. 測(cè)試

我們創(chuàng)建一個(gè)index.html頁(yè)面,然后<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>

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

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

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

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

訪問(wèn)

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

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

3.配置

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

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

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

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

加上index.html資源全稱(chēng)后可以訪問(wèn)

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

這個(gè)配置就是我們上面說(shuō)的那四個(gè)文件夾的配置了,注釋掉上面的配置,啟動(dòng)看看

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

啟動(dòng)訪問(wèn)localhost:8080

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

此時(shí)嘗試訪問(wèn)3b.jpg,4b.jpb都是無(wú)法訪問(wèn)的,只能訪問(wèn)2b.jpg

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

在springboot的application.properties中,下面2個(gè)配置是配置靜態(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è)置要指向的路徑,多個(gè)使用英文逗號(hào)隔開(kāi)

上面的那個(gè)是匹配規(guī)則,換句話說(shuō),只有靜態(tài)資源滿(mǎn)足什么樣的匹配條件,Spring Boot才會(huì)處理靜態(tài)資源請(qǐng)求。

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

舉例

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

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

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

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

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

         

使用:

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

相關(guān)文章

  • Java Synchronized的偏向鎖詳細(xì)分析

    Java Synchronized的偏向鎖詳細(xì)分析

    synchronized作為Java程序員最常用同步工具,很多人卻對(duì)它的用法和實(shí)現(xiàn)原理一知半解,以至于還有不少人認(rèn)為synchronized是重量級(jí)鎖,性能較差,盡量少用。但不可否認(rèn)的是synchronized依然是并發(fā)首選工具,本文就來(lái)詳細(xì)講講
    2023-04-04
  • Spring Cloud Gateway 記錄請(qǐng)求應(yīng)答數(shù)據(jù)日志操作

    Spring Cloud Gateway 記錄請(qǐng)求應(yīng)答數(shù)據(jù)日志操作

    這篇文章主要介紹了Spring Cloud Gateway 記錄請(qǐng)求應(yīng)答數(shù)據(jù)日志操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-12-12
  • mybatis中大批量數(shù)據(jù)插入解析

    mybatis中大批量數(shù)據(jù)插入解析

    這篇文章主要介紹了mybatis中大批量數(shù)據(jù)插入解析,使用Mybatis框架批量插入的3種方法,分別是多次調(diào)用insert方法、foreach標(biāo)簽、batch模式,本文來(lái)詳細(xì)說(shuō)明一下,需要的朋友可以參考下
    2024-01-01
  • SpringBoot快速整合Mybatis、MybatisPlus(代碼生成器)實(shí)現(xiàn)數(shù)據(jù)庫(kù)訪問(wèn)功能

    SpringBoot快速整合Mybatis、MybatisPlus(代碼生成器)實(shí)現(xiàn)數(shù)據(jù)庫(kù)訪問(wèn)功能

    這篇文章主要介紹了SpringBoot快速整合Mybatis、MybatisPlus(代碼生成器)實(shí)現(xiàn)數(shù)據(jù)庫(kù)訪問(wèn)功能,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-04-04
  • Component-Scan 不掃描jar里面的類(lèi)問(wèn)題

    Component-Scan 不掃描jar里面的類(lèi)問(wèn)題

    這篇文章主要介紹了Component-Scan 不掃描jar里面的類(lèi)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • JAVA遞歸生成樹(shù)形菜單的實(shí)現(xiàn)過(guò)程

    JAVA遞歸生成樹(shù)形菜單的實(shí)現(xiàn)過(guò)程

    這篇文章主要介紹了JAVA遞歸生成樹(shù)形菜單,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-01-01
  • Java界面編程實(shí)現(xiàn)界面跳轉(zhuǎn)

    Java界面編程實(shí)現(xiàn)界面跳轉(zhuǎn)

    這篇文章主要為大家詳細(xì)介紹了Java界面編程實(shí)現(xiàn)界面跳轉(zhuǎn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • 詳談jvm--Java中init和clinit的區(qū)別

    詳談jvm--Java中init和clinit的區(qū)別

    下面小編就為大家?guī)?lái)一篇詳談jvm--Java中init和clinit的區(qū)別。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-10-10
  • java 中序列化與readResolve()方法的實(shí)例詳解

    java 中序列化與readResolve()方法的實(shí)例詳解

    這篇文章主要介紹了java 中序列化與readResolve()方法的實(shí)例詳解的相關(guān)資料,這里提供實(shí)例幫助大家理解這部分知識(shí),需要的朋友可以參考下
    2017-08-08
  • Java Web項(xiàng)目創(chuàng)建并實(shí)現(xiàn)前后端交互

    Java Web項(xiàng)目創(chuàng)建并實(shí)現(xiàn)前后端交互

    本文主要介紹了Java Web項(xiàng)目創(chuàng)建并實(shí)現(xiàn)前后端交互,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07

最新評(píng)論

乐业县| 迁安市| 封开县| 临高县| 镇安县| 静宁县| 乐山市| 巴彦淖尔市| 比如县| 巴楚县| 普宁市| 文山县| 樟树市| 昌都县| 林周县| 故城县| 吉木萨尔县| 饶平县| 大竹县| 澄迈县| 广安市| 陆川县| 长海县| 方城县| 琼海市| 水城县| 青河县| 黔东| 灌南县| 宜宾市| 桐梓县| 扬州市| 南涧| 盐边县| 聊城市| 兴安盟| 庄浪县| 吉首市| 涿州市| 海淀区| 土默特左旗|