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

springBoot快速訪問工程目錄下的靜態(tài)資源

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

1、牛刀小試

1.1 圖片靜態(tài)資源的訪問

先看官方怎么說,點擊鏈接,打開SpringBoot官方文檔

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

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

啟動項目,分別訪問這四張圖片:

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

文檔說的對,果然沒騙人,

由此我們認定 SpringBoot 訪問靜態(tài)資源:當前項目根路徑 + / + 靜態(tài)資源名

1.2 為靜態(tài)資源添加訪問前綴

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/**

文檔又解釋了一下,說,默認情況下SpringBoot是幫你映射的路徑是/** ,

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

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

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

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

添加完再去訪問原來的dog圖片鏈接:http://localhost:8080/dog.jpeg

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

嘿嘿😋

1.3 WelCome Page 的奇妙跳轉

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.

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

新建html,放到 /static 下,訪問:

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

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

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

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

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

@Override
        public void addResourceHandlers(ResourceHandlerRegistry registry) {
            // 相當于一個開關去控制靜態(tài)資源處理器的加載,默認為true,設置為false就會禁止所有規(guī)則
            if (!this.resourceProperties.isAddMappings()) {
                logger.debug("Default resource handling disabled");
                return;
            }
            //第一個就配置webjars的訪問規(guī)則,規(guī)定在類路徑的/META-INF/resources/webjars/路徑下,感興趣的同學可以點進方法去,里面還配置了webjars的瀏覽器端緩存時間,是在application。propertities中的一個配置項 spring.web.resources.cache.period  
            addResourceHandler(registry, "/webjars/**", "classpath:/META-INF/resources/webjars/");
            //這里配置了靜態(tài)資源的四個訪問路徑
            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);
                }
            });
        }

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

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

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

重啟項目,發(fā)現(xiàn)首頁無法訪問了...

改回 true ,首頁就又可以訪問了

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

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

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

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

打斷點如下:

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

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

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

還是在 WebMvcAutoConfiguration 這個類:搜索 “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 的有參構造也拿來

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");
        }
    }

根據有參構造可以看出來,只有 歡迎頁這個資源存在,并且 靜態(tài)資源訪問路徑是 /** ,才能重定向到indes.html ,否則就會去找 Controller 處理。

這就解釋了,上面為什么配置了靜態(tài)資源訪問路徑 為/res/** 后導致首頁無法訪問到 的問題

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

以上就是SprignBoot訪問工程目錄下的靜態(tài)資源的詳細內容,更多關于SprignBoot訪問靜態(tài)資源的資料請關注腳本之家其它相關文章!

相關文章

  • springmvc Controller方法沒有加@ResponseBody導致api訪問404問題

    springmvc Controller方法沒有加@ResponseBody導致api訪問404問題

    這篇文章主要介紹了springmvc Controller方法沒有加@ResponseBody導致api訪問404問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • 利用java批量給pdf加水印的方法示例

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

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

    Spring-AOP @AspectJ切點函數之@annotation()用法

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

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

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

    Java 數組高頻考點分析講解

    數組對于每一門編程語言來說都是重要的數據結構之一,當然不同語言對數組的實現(xiàn)及處理也不盡相同。Java 語言中提供的數組是用來存儲固定大小的同類型元素
    2022-04-04
  • SpringBoot中使用redis做分布式鎖的方法

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

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

    Java的sort的排序及使用詳解

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

    解決MyBatis中模糊搜索使用like匹配帶%字符時失效問題

    Mybatis是我們日常項目中經常使用的框架,在項目中我們一般會使用like查詢作為模糊匹配字符進行搜索匹配,下面的Mapper.xml是我們使用like在項目中進行模糊匹配的常用方式,感興趣的朋友跟隨小編一起看看吧
    2021-09-09
  • 淺析java中asList的使用詳解

    淺析java中asList的使用詳解

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

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

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

最新評論

通渭县| 潞城市| 方正县| 榆中县| 隆回县| 安远县| 焉耆| 郸城县| 杭锦旗| 西华县| 长宁县| 子洲县| 沙河市| 林口县| 新绛县| 呼伦贝尔市| 且末县| 永和县| 吉水县| 达拉特旗| 新兴县| 三穗县| 专栏| 靖边县| 万山特区| 楚雄市| 衡阳市| 翁源县| 万宁市| 台前县| 来安县| 揭阳市| 栾川县| 秭归县| 石台县| 通江县| 嵊州市| 双辽市| 麻江县| 平顶山市| 新民市|