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

SpringBoot配置外部靜態(tài)資源映射問題

 更新時間:2022年11月16日 15:26:52   作者:佯佯Young  
這篇文章主要介紹了SpringBoot配置外部靜態(tài)資源映射問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

SpringBoot配置外部靜態(tài)資源映射

使用場景

實(shí)際項目中,特別是前后端分離的項目,SpringBoot后臺打包(jar包)后,以jar包形式直接啟動服務(wù)后,項目中包含的靜態(tài)資源則無法動態(tài)修改。

此時,需要配置一個外部的映射路徑來實(shí)現(xiàn)靜態(tài)資源訪問和修改、上傳功能等。

SpringBoot版本說明

版本:2.3.4.RELEASE

添加外部路徑配置

staticPath為自定義的外部資源物理路徑,放在配置文件中,如:D:/Tasks/

application.properties文件內(nèi)容如下:

server.port=8086
server.servlet.context-path=/iserver
spring.output.ansi.enabled=ALWAYS
spring.mvc.static-path-pattern=/static/**
spring.mvc.format.date=yyyy-MM-dd HH:mm:ss

project.static = D:/Tasks/

配置映射

添加WebMvcConfig,如下:

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;

@Configuration
public class WebMvcConfig extends WebMvcConfigurationSupport {

    @Value("${project.static}")
    private String staticPath;
	/**
	* 跨域
	**/
	@Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
        		.allowedHeaders("*")
                .allowedOrigins("*")
                .allowedMethods("POST","GET","PUT","OPTIONS","DELETE")
                .allowCredentials(true);
    }
    /**
     * 靜態(tài)資源處理
     **/
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/file/**").addResourceLocations("file:" + staticPath);
        registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
    }
}

測試訪問

在D盤新建Tasks文件夾,在新建js文件夾,存放jquery-3.1.1.min.js

正常啟動項目,在瀏覽器輸入地址: http://localhost:8086/iserver/file/js/jquery-3.1.1.min.js

SpringBoot靜態(tài)資源映射原理

HandlerMapping:處理器映射。保存了每一個Handler能處理哪些請求。 

①靜態(tài)資源讀取 

只要靜態(tài)資源放在類路徑下: /static、public 、/resources 、/META-INF/resources這四個類路徑目錄下, 

則訪問 : 當(dāng)前項目根路徑/ + 靜態(tài)資源名就可以讀取到這四個目錄下的靜態(tài)資源 

原理: 靜態(tài)映射/ 

請求進(jìn)來,先去找Controller看能不能處理。不能處理的所有請求又都交給靜態(tài)資源處理器。靜態(tài)資源也找不到則響應(yīng)404頁面 

②改變默認(rèn)的靜態(tài)資源路徑

spring:

//這個修改用戶訪問服務(wù)器時資源映射的前綴(默認(rèn)無前綴,即/+資源名可以直接訪問,現(xiàn)在需要加上前綴res/) 

(但是這個修改資源映射前綴會導(dǎo)致歡迎頁和favicon失效,因?yàn)榈讓哟a是死代碼 / 映射到服務(wù)器靜態(tài)資源目錄中,而不是spring.mvc.static-path-pattern這個變量) 

mvc:

static-path-pattern: /res/

//這個修改靜態(tài)資源在服務(wù)器的默認(rèn)存放路徑(默認(rèn)是/static/,/public/,/resources/、META-INF/resouces/) 

resources: 

static-locations: [classpath:/haha/]

③靜態(tài)資源映射底層原理 

靜態(tài)資源映射自動配置類地址–

/web/servlet/WebMvcAutoConfiguration

解析一:**

當(dāng)配置文件中設(shè)置

則循環(huán)進(jìn)去,下面配置的所有靜態(tài)資源映射規(guī)則不生效

解析二:

可以在配置文件中設(shè)置靜態(tài)資源的緩存規(guī)則,比如設(shè)置瀏覽器緩存靜態(tài)資源的時長

解析三:

將外部訪問/webjars/的請求映射到/META-INF/resources/webjars/

 

即外界訪問/webjars/jquery/3.5.1/jquery.js就可以直接訪問到這個路徑下的jquery.js 

解析四:

 

首先獲取到配置文件中設(shè)置的static-Path-Pattern設(shè)置的靜態(tài)資源訪問路徑,如果沒有設(shè)置,則默認(rèn)為/** 

這個訪問路徑映射對應(yīng)服務(wù)器中的以下路徑

所以靜態(tài)資源放在上述四個目錄(而這些目錄也是可以在配置文件中修改的)中時,外界訪問/+資源名,相當(dāng)于在這四個目錄中尋找要找的資源 

④歡迎頁的處理規(guī)則

解析一:

點(diǎn)進(jìn)WelcomePageHandlerMapping構(gòu)造器方法中

從中可以看到,只有歡迎頁存在,并且staticPathPattern等于/**時,才能夠使用歡迎頁功能 

否則調(diào)用能處理index請求的controller 

⑤favicon原理 

favicon是瀏覽器自動向服務(wù)器發(fā)送請求/favicon.ico請求來設(shè)置頁面圖標(biāo),和代碼沒什么關(guān)系,所以當(dāng)修改了配置文件中的staticPathPattern時,/favicon.ico不能夠在服務(wù)器找到對應(yīng)前綴目錄下的favicon.ico,自然設(shè)置不了頁面圖標(biāo)

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

相關(guān)文章

  • SpringBoot的自定義banner使用方法

    SpringBoot的自定義banner使用方法

    這篇文章主要介紹了SpringBoot的自定義banner使用方法,在Spring Boot中,你可以通過定制Banner來個性化你的應(yīng)用程序啟動時的輸出,Banner是一個在應(yīng)用程序啟動時顯示的ASCII藝術(shù)字形式的標(biāo)志,用于增加應(yīng)用程序的識別度和個性化,需要的朋友可以參考下
    2024-01-01
  • IDEA使用JDBC安裝配置jar包連接MySQL數(shù)據(jù)庫

    IDEA使用JDBC安裝配置jar包連接MySQL數(shù)據(jù)庫

    這篇文章介紹了IDEA使用JDBC安裝配置jar包連接MySQL數(shù)據(jù)庫的方法,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-01-01
  • Java?精煉解讀數(shù)據(jù)結(jié)構(gòu)的鏈表的概念與實(shí)現(xiàn)

    Java?精煉解讀數(shù)據(jù)結(jié)構(gòu)的鏈表的概念與實(shí)現(xiàn)

    鏈表是一種物理存儲單元上非連續(xù)、非順序的存儲結(jié)構(gòu),數(shù)據(jù)元素的邏輯順序是通過鏈表中的指針連接次序?qū)崿F(xiàn)的,每一個鏈表都包含多個節(jié)點(diǎn),節(jié)點(diǎn)又包含兩個部分,一個是數(shù)據(jù)域,一個是引用域
    2022-03-03
  • 詳解關(guān)于eclipse中使用jdk15對應(yīng)javafx15的配置問題總結(jié)

    詳解關(guān)于eclipse中使用jdk15對應(yīng)javafx15的配置問題總結(jié)

    這篇文章主要介紹了詳解關(guān)于eclipse中使用jdk15對應(yīng)javafx15的配置問題總結(jié),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • Java序列化框架Kryo高效轉(zhuǎn)換對象為字節(jié)流面試精講

    Java序列化框架Kryo高效轉(zhuǎn)換對象為字節(jié)流面試精講

    這篇文章主要為大家介紹了Java序列化框架Kryo高效轉(zhuǎn)換對象為字節(jié)流面試精講,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10
  • 詳解Java Spring各種依賴注入注解的區(qū)別

    詳解Java Spring各種依賴注入注解的區(qū)別

    這篇文章主要介紹了詳解Java Spring各種依賴注入注解的區(qū)別的相關(guān)資料,需要的朋友可以參考下
    2016-03-03
  • idea中l(wèi)ombok的用法

    idea中l(wèi)ombok的用法

    lombok是開源的代碼生成庫,是一款非常實(shí)用的小工具,在更改實(shí)體類時只需要修改屬性即可,減少了很多重復(fù)代碼的編寫工作,今天小編給大家介紹idea中l(wèi)ombok的用法,感興趣的朋友一起看看吧
    2021-12-12
  • SpringBoot自動裝配原理以及分析

    SpringBoot自動裝配原理以及分析

    這篇文章主要介紹了SpringBoot自動裝配原理以及分析,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • java天數(shù)計算函數(shù)(當(dāng)前月天數(shù)、某月總天數(shù)及某月剩余天數(shù))4種方法實(shí)現(xiàn)代碼

    java天數(shù)計算函數(shù)(當(dāng)前月天數(shù)、某月總天數(shù)及某月剩余天數(shù))4種方法實(shí)現(xiàn)代碼

    日常開發(fā)中會遇到關(guān)于日期的計算,比如當(dāng)月的天數(shù)、兩日期之間的天數(shù)、當(dāng)月剩余天數(shù)等等,這篇文章主要給大家介紹了關(guān)于java天數(shù)計算函數(shù)(當(dāng)前月天數(shù)、某月總天數(shù)及某月剩余天數(shù))4種方法實(shí)現(xiàn)的相關(guān)資料,需要的朋友可以參考下
    2023-10-10
  • java留言管理系統(tǒng)中模糊查詢實(shí)例分享

    java留言管理系統(tǒng)中模糊查詢實(shí)例分享

    這篇文章主要為大家詳細(xì)介紹了基于MVC+DAO的留言管理系統(tǒng)中java模糊查詢的簡單使用方法,感興趣的小伙伴們可以參考一下
    2016-04-04

最新評論