<tbody id="86a2i"></tbody>


<dd id="86a2i"></dd>
<progress id="86a2i"><track id="86a2i"></track></progress>

<dd id="86a2i"></dd>
<em id="86a2i"><ruby id="86a2i"><u id="86a2i"></u></ruby></em>

    <dd id="86a2i"></dd>

    SpringBoot配置外部靜態資源映射

    使用場景

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

    此時,需要配置一個外部的映射路徑來實現靜態資源訪問和修改、上傳功能等。

    SpringBoot版本說明

    版本:2.3.4.RELEASE

    SpringBoot配置外部靜態資源映射問題

    添加外部路徑配置

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

    application.properties文件內容如下:

    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);
        }
        /**
         * 靜態資源處理
         **/
        @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

    SpringBoot配置外部靜態資源映射問題

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

    SpringBoot配置外部靜態資源映射問題

    SpringBoot靜態資源映射原理

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

    ①靜態資源讀取?

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

    則訪問 : 當前項目根路徑/ + 靜態資源名就可以讀取到這四個目錄下的靜態資源?

    原理: 靜態映射/?

    請求進來,先去找Controller看能不能處理。不能處理的所有請求又都交給靜態資源處理器。靜態資源也找不到則響應404頁面?

    ②改變默認的靜態資源路徑

    spring:

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

    (但是這個修改資源映射前綴會導致歡迎頁和favicon失效,因為底層代碼是死代碼 / 映射到服務器靜態資源目錄中,而不是spring.mvc.static-path-pattern這個變量)?

    mvc:

    static-path-pattern: /res/

    //這個修改靜態資源在服務器的默認存放路徑(默認是/static/,/public/,/resources/、META-INF/resouces/)?

    resources:?

    static-locations: [classpath:/haha/]

    ③靜態資源映射底層原理?

    靜態資源映射自動配置類地址–

    SpringBoot配置外部靜態資源映射問題

    SpringBoot配置外部靜態資源映射問題?

    /web/servlet/WebMvcAutoConfiguration

    SpringBoot配置外部靜態資源映射問題?

    解析一:**

    SpringBoot配置外部靜態資源映射問題

    當配置文件中設置

    SpringBoot配置外部靜態資源映射問題

    則循環進去,下面配置的所有靜態資源映射規則不生效

    解析二:

    SpringBoot配置外部靜態資源映射問題

    可以在配置文件中設置靜態資源的緩存規則,比如設置瀏覽器緩存靜態資源的時長

    解析三:

    SpringBoot配置外部靜態資源映射問題

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

    SpringBoot配置外部靜態資源映射問題?

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

    解析四:

    SpringBoot配置外部靜態資源映射問題?

    首先獲取到配置文件中設置的static-Path-Pattern設置的靜態資源訪問路徑,如果沒有設置,則默認為/**?

    這個訪問路徑映射對應服務器中的以下路徑

    SpringBoot配置外部靜態資源映射問題

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

    ④歡迎頁的處理規則

    SpringBoot配置外部靜態資源映射問題

    解析一:

    SpringBoot配置外部靜態資源映射問題

    點進WelcomePageHandlerMapping構造器方法中

    SpringBoot配置外部靜態資源映射問題

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

    否則調用能處理index請求的controller?

    ⑤favicon原理?

    favicon是瀏覽器自動向服務器發送請求/favicon.ico請求來設置頁面圖標,和代碼沒什么關系,所以當修改了配置文件中的staticPathPattern時,/favicon.ico不能夠在服務器找到對應前綴目錄下的favicon.ico,自然設置不了頁面圖標

    以上為個人經驗,希望能給大家一個參考,也希望大家多多支持。

    原文地址:https://blog.csdn.net/yy284872497/article/details/117135638

    相關文章:

    免费一级a片在线播放视频|亚洲娇小性XXXX色|曰本无码毛片道毛片视频清|亚洲一级a片视频免费观看
    <tbody id="86a2i"></tbody>

    
    
    <dd id="86a2i"></dd>
    <progress id="86a2i"><track id="86a2i"></track></progress>

    <dd id="86a2i"></dd>
    <em id="86a2i"><ruby id="86a2i"><u id="86a2i"></u></ruby></em>

      <dd id="86a2i"></dd>