1. 程式人生 > >Spring boot 靜態資源訪問

Spring boot 靜態資源訪問

0. 兩個配置

spring.mvc.static-path-pattern

spring.resources.static-locations

1. application中需要先行的兩個配置項

1.1 spring.mvc.static-path-pattern

這個配置項是告訴springboot,應該以什麼樣的方式去尋找資源。預設配置為 /* 。換句話說,只有靜態資源滿足什麼樣的匹配條件,Spring Boot才會處理靜態資源請求

比如下面這個配置

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

如果原先訪問首頁的地址是:http://localhost:8888/index.html


那麼在你配置這個配置後,上面的訪問就失效了,現在訪問同樣的頁面需要這樣訪問:http://localhost:8888/soul/index.html

  • 問題1:配置這個配置後原本http://localhost:8888可以直接訪問首頁,但是現在http://localhost:8888/soul訪問不了首頁。
    • 後記:多次使用後發現只要配置了這個配置,不管配成什麼,http://localhost:8888都訪問不了首頁。
  • 問題2:配置訪問路徑為/soul/後原本可以訪問resources下其他資料夾的目錄下的靜態資源,現在不可以了。比如下面截圖中test/test.html不能訪問了,在沒有配置為/soul/
    可以通過http://localhost:8888/test/test.html訪問

1.2 spring.resources.static-locations

這個配置項是告訴springboot去哪找資源。

# 預設值為
spring.resources.static-locations=classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/

根據前後關係確定優先順序,也就是說如果/META-INF/resources/目錄和/resources都有一個index.html,那麼根據預設的優先順序,會去訪問/META-INF/resources/下的資源。

2. 一個配置的例項

首先專案目錄是這個樣子的:static和tempaltes各有幾個頁面,其中有一個重名的test頁面用來測試優先順序

由於現在建立的springboot專案,一般會將js、css等靜態檔案放在static下,而將頁面放在templates下,所以配置上只配置了資源目錄,第一個配置使用預設的*/ **,具體如下。

spring.resources.static-locations=classpath:/templates/,classpath:/static/

配置完了啟動專案在8888埠,訪問http://localhost:8888/,根據上面理論應該會訪問到static下的index.html上,結果如圖:

訪問:http://localhost:8888/test.html,目測會訪問到templates下的test.html上,因為配置中templates的優先順序高於static,結果如圖

同樣的,如果有建資料夾的需求在對應目錄下建資料夾,並把靜態資源放進去即可訪問。

 

參考:https://www.jianshu.c