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

springBoot快速訪(fǎng)問(wèn)工程目錄下的靜態(tài)資源

 更新時(shí)間:2021年06月23日 08:55:20   作者:Dkwestworld  
springboot工程,是沒(méi)有webapp文件夾的,靜態(tài)文件放在src/main/resources/static文件夾下即可,模板文件放在src/main/resources/templates下,本文給大家介紹springBoot快速訪(fǎng)問(wèn)工程目錄下的靜態(tài)資源的相關(guān)知識(shí),一起看看吧

1、牛刀小試

1.1 圖片靜態(tài)資源的訪(fǎng)問(wèn)

先看官方怎么說(shuō),點(diǎn)擊鏈接,打開(kāi)SpringBoot官方文檔

文檔中明確指出:/static(or/publicor/resourcesor/META-INF/resources) ,這幾個(gè)目錄是SpringBoot放置靜態(tài)資源的目錄,只要把靜態(tài)資源放到這幾個(gè)目錄下,就能直接訪(fǎng)問(wèn)到。

新建 Spingboot web項(xiàng)目試下,新項(xiàng)目只有 /static 目錄 ,手動(dòng)創(chuàng)建其他幾個(gè)靜態(tài)資源文件夾,每個(gè)目錄添加1張圖片

啟動(dòng)項(xiàng)目,分別訪(fǎng)問(wèn)這四張圖片:

發(fā)現(xiàn)圖片均可訪(fǎng)問(wèn),

文檔說(shuō)的對(duì),果然沒(méi)騙人,

由此我們認(rèn)定 SpringBoot 訪(fǎng)問(wèn)靜態(tài)資源:當(dāng)前項(xiàng)目根路徑 + / + 靜態(tài)資源名

1.2 為靜態(tài)資源添加訪(fǎng)問(wèn)前綴

By default, resources are mapped on /**, but you can tune that with the spring.mvc.static-path-pattern property. For instance, relocating all resources to /resources/** can be achieved as follows:

PropertiesYaml
spring.mvc.static-path-pattern=/resources/**

文檔又解釋了一下,說(shuō),默認(rèn)情況下SpringBoot是幫你映射的路徑是/** ,

但是,如果你想加一個(gè)前綴也可以,比如 /res/

技術(shù)圈有句話(huà):先有業(yè)務(wù)才有技術(shù),SpringBoot官方考慮到某些網(wǎng)站添加了登錄驗(yàn)證,一般需要登錄后才能訪(fǎng)問(wèn)項(xiàng)目中的資源,為了登錄頁(yè)樣式也能正常顯示,方便放行靜態(tài)資源,直接給所有靜態(tài)資源添加一個(gè)前綴,既可統(tǒng)一攔截,又可統(tǒng)一放開(kāi)

操作:在配置文件application.properties中添加

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

添加完再去訪(fǎng)問(wèn)原來(lái)的dog圖片鏈接:http://localhost:8080/dog.jpeg

但是訪(fǎng)問(wèn):http://localhost:8080/res/dog.jpeg發(fā)現(xiàn)這才可以

嘿嘿😋

1.3 WelCome Page 的奇妙跳轉(zhuǎn)

7.1.6. Welcome Page
Spring Boot supports both static and templated welcome pages. It first looks for an index.html file in the configured static content locations. If one is not found, it then looks for an index template. If either is found, it is automatically used as the welcome page of the application.

文檔說(shuō)把一個(gè)名稱(chēng)叫 index.html 的文件放到任意的靜態(tài)目錄下,訪(fǎng)問(wèn)http://localhost:8080即可到達(dá),意思就是給你一個(gè)首頁(yè)跳轉(zhuǎn)的快捷方式(注意:需把1.2 的配置路徑去掉,否則會(huì)導(dǎo)致welcome page功能失效,后面源碼分析會(huì)說(shuō)到)

新建html,放到 /static 下,訪(fǎng)問(wèn):

2、那么,SpringBoot是如何做到的呢?

接下來(lái)看源碼探究 SpringBoot 靜態(tài)資源配置原理 》》》》 gogogo

源碼位置在:spring-boot-autoconfigure-2.5.1.jar 這個(gè)jar里面,具體的目錄如下:

/spring-boot-autoconfigure-2.5.1.jar!/org/springframework/boot/autoconfigure/web/servlet/WebMvcAutoConfiguration.class

WebMvcAutoConfiguration 類(lèi)里面找到addResourceHandlers 方法,顧名思義 添加資源處理器

@Override
        public void addResourceHandlers(ResourceHandlerRegistry registry) {
            // 相當(dāng)于一個(gè)開(kāi)關(guān)去控制靜態(tài)資源處理器的加載,默認(rèn)為true,設(shè)置為false就會(huì)禁止所有規(guī)則
            if (!this.resourceProperties.isAddMappings()) {
                logger.debug("Default resource handling disabled");
                return;
            }
            //第一個(gè)就配置webjars的訪(fǎng)問(wèn)規(guī)則,規(guī)定在類(lèi)路徑的/META-INF/resources/webjars/路徑下,感興趣的同學(xué)可以點(diǎn)進(jìn)方法去,里面還配置了webjars的瀏覽器端緩存時(shí)間,是在application。propertities中的一個(gè)配置項(xiàng) spring.web.resources.cache.period  
            addResourceHandler(registry, "/webjars/**", "classpath:/META-INF/resources/webjars/");
            //這里配置了靜態(tài)資源的四個(gè)訪(fǎng)問(wèn)路徑
            addResourceHandler(registry, this.mvcProperties.getStaticPathPattern(), (registration) -> {
                registration.addResourceLocations(this.resourceProperties.getStaticLocations());
                if (this.servletContext != null) {
                    ServletContextResource resource = new ServletContextResource(this.servletContext, SERVLET_LOCATION);
                    registration.addResourceLocations(resource);
                }
            });
        }

第一個(gè)if判斷this.resourceProperties.isAddMappings() 去配置文件獲取

spring.resources 這個(gè)屬性,默認(rèn)是 true , 如果設(shè)置為false 那么就等于禁用掉所有的靜態(tài)資源映射功能,不行就試一下

#springapplication.propertities中配置
spring.web.resources.add-mappings=false

重啟項(xiàng)目,發(fā)現(xiàn)首頁(yè)無(wú)法訪(fǎng)問(wèn)了...

改回 true ,首頁(yè)就又可以訪(fǎng)問(wèn)了

不要停留,繼續(xù)看第二個(gè)addResourceHandler 方法,打斷點(diǎn)看看這個(gè)方法添加了什么規(guī)則

沒(méi)錯(cuò),第二個(gè)addResourceHandler 方法就表明 / **下的所有請(qǐng)求,都在這四個(gè)默認(rèn)的位置去找靜態(tài)資源映射 ,這四個(gè)目錄在官方文檔中提到過(guò)。

另外,訪(fǎng)問(wèn)路徑前綴是在 this.mvcProperties.getStaticPathPattern() 獲取的,配置上:

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

打斷點(diǎn)如下:

注意📢: 所有的請(qǐng)求先去controller控制器找映射,找不到,再來(lái)靜態(tài)資源映射器。

到這里解決了靜態(tài)資源目錄的問(wèn)題。

馬不停蹄,探究 Welcome Page 的事情 》》》》》

還是在 WebMvcAutoConfiguration 這個(gè)類(lèi):搜索 “WelcomePage” :

@Bean
        public WelcomePageHandlerMapping welcomePageHandlerMapping(ApplicationContext applicationContext,
                FormattingConversionService mvcConversionService, ResourceUrlProvider mvcResourceUrlProvider) {
            WelcomePageHandlerMapping welcomePageHandlerMapping = new WelcomePageHandlerMapping(
                    new TemplateAvailabilityProviders(applicationContext), applicationContext, getWelcomePage(),
                    this.mvcProperties.getStaticPathPattern());
            welcomePageHandlerMapping.setInterceptors(getInterceptors(mvcConversionService, mvcResourceUrlProvider));
            welcomePageHandlerMapping.setCorsConfigurations(getCorsConfigurations());
            return welcomePageHandlerMapping;
        }

把WelcomePageHandlerMapping 的有參構(gòu)造也拿來(lái)

WelcomePageHandlerMapping(TemplateAvailabilityProviders templateAvailabilityProviders,
            ApplicationContext applicationContext, Resource welcomePage, String staticPathPattern) {
        if (welcomePage != null && "/**".equals(staticPathPattern)) {
            logger.info("Adding welcome page: " + welcomePage);
            setRootViewName("forward:index.html");
        }
        else if (welcomeTemplateExists(templateAvailabilityProviders, applicationContext)) {
            logger.info("Adding welcome page template: index");
            setRootViewName("index");
        }
    }

根據(jù)有參構(gòu)造可以看出來(lái),只有 歡迎頁(yè)這個(gè)資源存在,并且 靜態(tài)資源訪(fǎng)問(wèn)路徑是 /** ,才能重定向到indes.html ,否則就會(huì)去找 Controller 處理。

這就解釋了,上面為什么配置了靜態(tài)資源訪(fǎng)問(wèn)路徑 為/res/** 后導(dǎo)致首頁(yè)無(wú)法訪(fǎng)問(wèn)到 的問(wèn)題

好了,前面牛刀小試的坑已經(jīng)填完了,關(guān)于SpringBoot 靜態(tài)資源配置原理 這篇總結(jié)就到這了

以上就是SprignBoot訪(fǎng)問(wèn)工程目錄下的靜態(tài)資源的詳細(xì)內(nèi)容,更多關(guān)于SprignBoot訪(fǎng)問(wèn)靜態(tài)資源的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • springmvc Controller方法沒(méi)有加@ResponseBody導(dǎo)致api訪(fǎng)問(wèn)404問(wèn)題

    springmvc Controller方法沒(méi)有加@ResponseBody導(dǎo)致api訪(fǎng)問(wèn)404問(wèn)題

    這篇文章主要介紹了springmvc Controller方法沒(méi)有加@ResponseBody導(dǎo)致api訪(fǎng)問(wèn)404問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • 利用java批量給pdf加水印的方法示例

    利用java批量給pdf加水印的方法示例

    這篇文章主要介紹了利用java批量給pdf加水印的方法,文中給出了簡(jiǎn)單的示例代碼,需要的朋友可以參考借鑒,下面來(lái)一起看吧。
    2017-03-03
  • Spring-AOP @AspectJ切點(diǎn)函數(shù)之@annotation()用法

    Spring-AOP @AspectJ切點(diǎn)函數(shù)之@annotation()用法

    這篇文章主要介紹了Spring-AOP @AspectJ切點(diǎn)函數(shù)之@annotation()用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Java Swing組件下拉菜單控件JComboBox用法示例

    Java Swing組件下拉菜單控件JComboBox用法示例

    這篇文章主要介紹了Java Swing組件下拉菜單控件JComboBox用法,結(jié)合具體實(shí)例形式分析了Swing組件下拉菜單控件JComboBox的具體定義、使用方法及相關(guān)使用注意事項(xiàng),需要的朋友可以參考下
    2017-11-11
  • Java 數(shù)組高頻考點(diǎn)分析講解

    Java 數(shù)組高頻考點(diǎn)分析講解

    數(shù)組對(duì)于每一門(mén)編程語(yǔ)言來(lái)說(shuō)都是重要的數(shù)據(jù)結(jié)構(gòu)之一,當(dāng)然不同語(yǔ)言對(duì)數(shù)組的實(shí)現(xiàn)及處理也不盡相同。Java 語(yǔ)言中提供的數(shù)組是用來(lái)存儲(chǔ)固定大小的同類(lèi)型元素
    2022-04-04
  • SpringBoot中使用redis做分布式鎖的方法

    SpringBoot中使用redis做分布式鎖的方法

    這篇文章主要介紹了SpringBoot中使用redis做分布式鎖的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-09-09
  • Java的sort的排序及使用詳解

    Java的sort的排序及使用詳解

    這篇文章主要為大家詳細(xì)介紹了Java的sort的排序及使用,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下 ,希望您能夠多多關(guān)注
    2022-02-02
  • 解決MyBatis中模糊搜索使用like匹配帶%字符時(shí)失效問(wèn)題

    解決MyBatis中模糊搜索使用like匹配帶%字符時(shí)失效問(wèn)題

    Mybatis是我們?nèi)粘m?xiàng)目中經(jīng)常使用的框架,在項(xiàng)目中我們一般會(huì)使用like查詢(xún)作為模糊匹配字符進(jìn)行搜索匹配,下面的Mapper.xml是我們使用like在項(xiàng)目中進(jìn)行模糊匹配的常用方式,感興趣的朋友跟隨小編一起看看吧
    2021-09-09
  • 淺析java中asList的使用詳解

    淺析java中asList的使用詳解

    Java中的asList方法是數(shù)組工具類(lèi) Arrays中的一個(gè)靜態(tài)方法,asList()方法把數(shù)組轉(zhuǎn)換成集合時(shí),不能使用其修改集合相關(guān)的方法,本文通過(guò)示例代碼給大家介紹java asList使用,感興趣的朋友一起看看吧
    2021-10-10
  • 一文帶你掌握SpringBoot中常見(jiàn)定時(shí)任務(wù)的實(shí)現(xiàn)

    一文帶你掌握SpringBoot中常見(jiàn)定時(shí)任務(wù)的實(shí)現(xiàn)

    這篇文章主要為大家詳細(xì)介紹了Spring?Boot中定時(shí)任務(wù)的基本用法、高級(jí)特性以及最佳實(shí)踐,幫助開(kāi)發(fā)人員更好地理解和應(yīng)用定時(shí)任務(wù),提高系統(tǒng)的穩(wěn)定性和可靠性,需要的可以參考下
    2024-03-03

最新評(píng)論

房山区| 乌兰县| 宜章县| 镇远县| 横峰县| 方山县| 乐都县| 咸丰县| 阿城市| 绵阳市| 岗巴县| 安泽县| 阿拉善左旗| 曲阜市| 五莲县| 田阳县| 临城县| 应用必备| 丰城市| 延边| 长春市| 泰宁县| 石台县| 邢台市| 类乌齐县| 北海市| 东安县| 全椒县| 会昌县| 尤溪县| 同心县| 海阳市| 库车县| 逊克县| 外汇| 湟源县| 江西省| 嘉义市| 齐河县| 长宁县| 民和|