欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot無法訪問/static下靜態(tài)資源的解決

 更新時間:2021年09月09日 14:35:47   作者:Apelx  
這篇文章主要介紹了SpringBoot無法訪問/static下靜態(tài)資源的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

SpringBoot無法訪問/static下靜態(tài)資源

SpringBoot 訪問靜態(tài)資源的規(guī)則

都在WebMvcAutoConfiguration自動配置類中

在這里插入圖片描述

在該類下有對資源處理的方法

在這里插入圖片描述 在這里插入圖片描述

在這里插入圖片描述

默認按照該加載順序,加載靜態(tài)資源文件,而我嘗試了N次,瀏覽器無法訪問資源;查看官網(wǎng)后,我又修改了默認的加載位置。如下:

在這里插入圖片描述

spring.resources.static-locations=/static/

但是還是沒有能如期訪問! 而回過頭再回過頭看Web的自動配置類,我發(fā)現(xiàn)了一個被忽略的配置

在這里插入圖片描述

WebMvcConfigurationSupport.class這個類沒有的情況下,才會走SpringBoot的Web自動配置,而在==@EnableWebMvc==中,又驚奇的發(fā)現(xiàn)了它

在這里插入圖片描述

在這里插入圖片描述

SpringBoot容器里讀到了我們配置的@EnableWebMvc 注解

它通過 @Import 導(dǎo)入了 WebMvcConfigurationSupport 類,從而導(dǎo)致了 WebMvcAutoConfiguration 類沒有生效,此時我的問題找到了! 最后我又在Spring的官網(wǎng)找到了對應(yīng)的解釋,可供參考Spring MVC Auto Configuration

小結(jié)一下

如果項目有沒有非常多的功能,可以使用 @EnableWebMvc 注解,全面接管SpringBoot對SpringMVC的自動注入,自己來寫SpringMVC 運行所需的一些配置,這樣會減少自動注入帶來的一些無意義性能消耗;

而一般功能比較多的項目,還是使用SpringBoot推薦的對SpringMVC拓展方法 —— 繼承 WebMvcConfigurer 類,這樣不僅可以自己實現(xiàn)想要添加的WEB組件,也保留了SpringBoot底層的自動注入

SpringBoot2.*.*無法訪問靜態(tài)資源的坑

遇到的問題

在導(dǎo)入靜態(tài)資源(css、js包等)和html頁面模板時,發(fā)生無法讀取靜態(tài)資源的情況,總結(jié)是以下兩種情況:

1、輸入訪問靜態(tài)資源的url,出現(xiàn)白頁錯誤,無法訪問靜態(tài)資源;

2、輸入訪問html頁面的url,可以訪問成功,但是html頁面布局亂了,無法讀取樣式;

由于樣式是放在靜態(tài)資源文件夾的,既然無法訪問靜態(tài)資源,那么html頁面自然就無法讀取樣式了。所以問題歸結(jié)于“無法訪問靜態(tài)資源”。

注:模板引擎采用的是springboot推薦的thymeleaf來渲染html頁面

解決的方法

在配置類中添加以下方法

增加靜態(tài)資源的訪問路徑

主:詳細參考以下個人寫的配置類

@Configuration
public class SigninConfig extends WebMvcConfigurationSupport {
    //增加訪問路徑
    @Override
    protected void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
    }
    //請求與頁面映射
    @Override
    protected void addViewControllers(ViewControllerRegistry registry) {
        //urlPath:請求
        //setViewName:html頁面
        registry.addViewController("/").setViewName("signin");
    }
}

粗略的原因

springboot關(guān)于springmvc自動配置的機制主要有以下兩種(目前了解的),其中第一種就是涉及到“為什么無法訪問靜態(tài)資源”的問題:

(1)springboot不允許用戶個人添加的組件與自動配置一起作用,那么用戶添加的組件會覆蓋掉自動配置。

我的配置類繼承WebMvcConfigurationSupport,這是springmvc自動配置類,我猜想這個類涉及到靜態(tài)資源路徑的默認配置(沒有詳細看源碼不確定),@Configuration又把我的配置類添加到容器中,相當(dāng)于我的配置類和自動配置類都在容器中,那么根據(jù)(1),自動配置的靜態(tài)資源路徑自然就失效,所以如果我們不指定,自然就無法訪問靜態(tài)資源,所以需要我們重新指定靜態(tài)資源路徑(這也是為什么要重寫addResourceHandlers方法)。

(2)springboot允許用戶個人添加的組件(如view,也就是上述addViewControllers方法)與自動配置一起作用,那么用戶添加的組件會和自動配置一起存在;

那么重點來了,以前springboot1.版本的時候還沒有對(1)情況作出修改,也就是說即使你添加了相關(guān)的組件,默認的靜態(tài)資源路徑仍然是生效的,不需要再重寫路徑。

而到了springboot2.時,如果你添加了相關(guān)的組件,默認的靜態(tài)資源路徑就會失效,如果你不重新指明靜態(tài)資源路徑,那么你就無法訪問靜態(tài)資源,所以要多一步重新設(shè)置靜態(tài)資源路徑的步驟,完畢。

————————后續(xù)————————

原本是看著官網(wǎng)文檔,打算按照官方說的做一遍,然后好奇就把原配置路徑的代碼刪掉,結(jié)果居然能訪問?。?!沒有報白頁錯誤?。?!

@Configuration
public class SigninConfig extends WebMvcConfigurationSupport {
//    @Override
//    protected void addResourceHandlers(ResourceHandlerRegistry registry) {
//        registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
//    }
    @Override
    protected void addViewControllers(ViewControllerRegistry registry) {
        //urlPath:請求
        //setViewName:html頁面
        registry.addViewController("/").setViewName("signin");
    }
}

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

相關(guān)文章

  • Spring實戰(zhàn)之Bean定義中的SpEL表達式語言支持操作示例

    Spring實戰(zhàn)之Bean定義中的SpEL表達式語言支持操作示例

    這篇文章主要介紹了Spring實戰(zhàn)之Bean定義中的SpEL表達式語言支持操作,結(jié)合實例形式分析了Bean定義中的SpEL表達式語言操作步驟與實現(xiàn)技巧,需要的朋友可以參考下
    2019-12-12
  • SpringBoot實現(xiàn)quartz定時任務(wù)可視化管理功能

    SpringBoot實現(xiàn)quartz定時任務(wù)可視化管理功能

    這篇文章主要介紹了SpringBoot實現(xiàn)quartz定時任務(wù)可視化管理功能,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-08-08
  • 在SpringBoot中實現(xiàn)一個訂單號生成系統(tǒng)的示例代碼

    在SpringBoot中實現(xiàn)一個訂單號生成系統(tǒng)的示例代碼

    在Spring Boot中設(shè)計一個訂單號生成系統(tǒng),主要考慮到生成的訂單號需要滿足的幾個要求:唯一性、可擴展性、以及可能的業(yè)務(wù)相關(guān)性,本文給大家介紹了幾種常見的解決方案及相應(yīng)的示例代碼,需要的朋友可以參考下
    2024-02-02
  • 一種類似JAVA線程池的C++線程池實現(xiàn)方法

    一種類似JAVA線程池的C++線程池實現(xiàn)方法

    線程池(thread pool)是一種線程使用模式。線程過多或者頻繁創(chuàng)建和銷毀線程會帶來調(diào)度開銷,進而影響緩存局部性和整體性能。這篇文章主要介紹了一種類似JAVA線程池的C++線程池實現(xiàn)方法,需要的朋友可以參考下
    2019-07-07
  • 詳解SpringBoot之添加單元測試

    詳解SpringBoot之添加單元測試

    本篇文章主要介紹了詳解SpringBoot之添加單元測試,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-07-07
  • Java并發(fā)編程之阻塞隊列深入詳解

    Java并發(fā)編程之阻塞隊列深入詳解

    這篇文章主要介紹了詳解Java阻塞隊列(BlockingQueue)的實現(xiàn)原理,阻塞隊列是Java util.concurrent包下重要的數(shù)據(jù)結(jié)構(gòu),是一種特殊的隊列,需要的朋友可以參考下
    2021-10-10
  • 解決springboot啟動失敗的問題('hibernate.dialect'?not?set)

    解決springboot啟動失敗的問題('hibernate.dialect'?not?set)

    這篇文章主要介紹了解決springboot啟動失敗的問題('hibernate.dialect'?not?set),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • Java 日期格式y(tǒng)yyy-MM-dd與YYYY-MM-dd區(qū)別

    Java 日期格式y(tǒng)yyy-MM-dd與YYYY-MM-dd區(qū)別

    我們在java中常用的規(guī)范格式為:
    yyyy-MM-dd HH:mm:ss:SSS 24小時制或yyyy-MM-dd hh:mm:ss:SSS 12小時制,本文就來介紹一下兩者的區(qū)別,感興趣的可以了解一下
    2023-11-11
  • Java中的封裝性(包含this關(guān)鍵字,構(gòu)造器等)

    Java中的封裝性(包含this關(guān)鍵字,構(gòu)造器等)

    這篇文章主要介紹了Java中的封裝性(包含this關(guān)鍵字,構(gòu)造器等)問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • 怎樣使用PowerMockito 測試靜態(tài)方法

    怎樣使用PowerMockito 測試靜態(tài)方法

    這篇文章主要介紹了使用PowerMockito 測試靜態(tài)的方法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07

最新評論