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

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

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

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

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

都在WebMvcAutoConfiguration自動(dòng)配置類中

在這里插入圖片描述

在該類下有對(duì)資源處理的方法

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

在這里插入圖片描述

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

在這里插入圖片描述

spring.resources.static-locations=/static/

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

在這里插入圖片描述

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

在這里插入圖片描述

在這里插入圖片描述

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

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

小結(jié)一下

如果項(xiàng)目有沒(méi)有非常多的功能,可以使用 @EnableWebMvc 注解,全面接管SpringBoot對(duì)SpringMVC的自動(dòng)注入,自己來(lái)寫(xiě)SpringMVC 運(yùn)行所需的一些配置,這樣會(huì)減少自動(dòng)注入帶來(lái)的一些無(wú)意義性能消耗;

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

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

遇到的問(wèn)題

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

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

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

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

注:模板引擎采用的是springboot推薦的thymeleaf來(lái)渲染html頁(yè)面

解決的方法

在配置類中添加以下方法

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

主:詳細(xì)參考以下個(gè)人寫(xiě)的配置類

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

粗略的原因

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

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

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

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

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

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

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

原本是看著官網(wǎng)文檔,打算按照官方說(shuō)的做一遍,然后好奇就把原配置路徑的代碼刪掉,結(jié)果居然能訪問(wèn)?。。](méi)有報(bào)白頁(yè)錯(cuò)誤?。?!

@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:請(qǐng)求
        //setViewName:html頁(yè)面
        registry.addViewController("/").setViewName("signin");
    }
}

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

相關(guān)文章

  • Java8中的lambda表達(dá)式入門(mén)教程

    Java8中的lambda表達(dá)式入門(mén)教程

    lambda表達(dá)式,即帶有參數(shù)的表達(dá)式,為了更清晰地理解lambda表達(dá)式,下面通過(guò)示例代碼給大家介紹java8 lambda 表達(dá)式入門(mén)教程,感興趣的朋友一起看看吧
    2017-08-08
  • 關(guān)于SpringBoot整合Canal數(shù)據(jù)同步的問(wèn)題

    關(guān)于SpringBoot整合Canal數(shù)據(jù)同步的問(wèn)題

    大家都知道canal是阿里巴巴旗下的一款開(kāi)源工具,純java開(kāi)發(fā),支持mysql數(shù)據(jù)庫(kù),本文給大家介紹SpringBoot整合Canal數(shù)據(jù)同步的問(wèn)題,需要的朋友可以參考下
    2022-03-03
  • 解決Spring Batch框架job任務(wù)只跑一次的問(wèn)題

    解決Spring Batch框架job任務(wù)只跑一次的問(wèn)題

    這篇文章主要介紹了解決Spring Batch框架job任務(wù)只跑一次的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • java中BigDecimal類型比較大小和絕對(duì)值計(jì)算方式

    java中BigDecimal類型比較大小和絕對(duì)值計(jì)算方式

    這篇文章主要介紹了java中BigDecimal類型比較大小和絕對(duì)值計(jì)算方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • java實(shí)現(xiàn)隨機(jī)驗(yàn)證碼圖片生成

    java實(shí)現(xiàn)隨機(jī)驗(yàn)證碼圖片生成

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)隨機(jī)驗(yàn)證碼圖片生成,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • Java實(shí)現(xiàn)加鹽加密算法的示例詳解

    Java實(shí)現(xiàn)加鹽加密算法的示例詳解

    這篇文章主要為大家詳細(xì)介紹了如何利用Java語(yǔ)言實(shí)現(xiàn)加鹽加密算法,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以了解一下
    2023-06-06
  • Spring中利用SchedulingConfigurer實(shí)現(xiàn)動(dòng)態(tài)定時(shí)任務(wù)配置的示例

    Spring中利用SchedulingConfigurer實(shí)現(xiàn)動(dòng)態(tài)定時(shí)任務(wù)配置的示例

    定時(shí)任務(wù)是一項(xiàng)至關(guān)重要的功能,它們使得我們能夠按照預(yù)定的時(shí)間執(zhí)行特定的任務(wù),本文主要介紹了Spring中利用SchedulingConfigurer實(shí)現(xiàn)動(dòng)態(tài)定時(shí)任務(wù)配置的示例,感興趣的可以了解一下
    2024-05-05
  • java文件刪除不了的坑,特別是壓縮文件問(wèn)題

    java文件刪除不了的坑,特別是壓縮文件問(wèn)題

    這篇文章主要介紹了java文件刪除不了的坑,特別是壓縮文件問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • Java實(shí)現(xiàn)通過(guò)時(shí)間獲取8位驗(yàn)證碼

    Java實(shí)現(xiàn)通過(guò)時(shí)間獲取8位驗(yàn)證碼

    這篇文章主要為大家詳細(xì)介紹了Java如何通過(guò)時(shí)間獲取8位驗(yàn)證碼(每?jī)蓚€(gè)小時(shí)生成一個(gè)),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-11-11
  • win10安裝rabbitMQ的詳細(xì)步驟

    win10安裝rabbitMQ的詳細(xì)步驟

    RabbitMQ是一個(gè)開(kāi)源的消息中間件(Message Broker),它基于AMQP協(xié)議設(shè)計(jì),用于在分布式系統(tǒng)中實(shí)現(xiàn)消息的高效、可靠傳輸,本文給打擊介紹了win10安裝rabbitMQ的詳細(xì)步驟,文中通過(guò)圖文講解的非常詳細(xì),需要的朋友可以參考下
    2024-06-06

最新評(píng)論

新津县| 琼结县| 新干县| 乐亭县| 荔浦县| 那曲县| 绍兴县| 和平县| 六安市| 宣恩县| 惠水县| 青铜峡市| 邻水| 盐源县| 台南市| 彩票| 肃南| 梁山县| 板桥市| 饶阳县| 高邮市| 开原市| 抚远县| 满城县| 罗城| 宝山区| 肥西县| 无锡市| 二手房| 遵义县| 茶陵县| 武强县| 定边县| 安溪县| 新平| 大兴区| 四会市| 宝应县| 石阡县| 乾安县| 西充县|