SpringBoot靜態資源
默認情況下,也就是application.properties配置文件沒有做任何配置,我們只需要將靜態資源放在以下幾個目錄中,就可以直接通過url在瀏覽器中訪問。
/META-INF/resources/
/resources/
/static/
/public/
注:請求地址中並不需要目錄前綴,如果加上了反而多此一舉會報 404 錯誤。因為 spring.mvc.static-path-pattern= ,默認值為 /**,且在路徑映射(spring.resources.static-locations)中已經自動的添加上了目錄前綴。

如果這四個目錄中存在相同名稱的靜態資源文件,那么優先訪問哪個目錄下面的資源啊?
靜態資源的默認訪問優先級:/META-INF/resources/
>/resources/
>/static/
>/public/
注:只能按優先級訪問,無法指定訪問某個目錄下的重名文件。(在實際開發中,一般只會創建一個目錄);文件名沒有沖突的話,就會去挨個掃描目錄去查找要訪問的靜態資源文件。
SpringBoot關於靜態資源的訪問涉及到了application.properties中的兩個屬性
查看源碼可知:
# 默認值為 /**
spring.mvc.static-path-pattern= #這里設置靜態資源匹配的url-pattern
# 默認值為 classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/
spring.resources.static-locations= #這里設置要指向的路徑,多個使用英文逗號隔開,在前面的優先級高
/META-INF/resources/
、
/resources/
、
/static/
、
/public/
這四個目錄了,還有這四個目錄訪問的優先級是怎么來的了。
修改靜態資源映射的方法
方式一 、修改這兩個屬性來改變靜態資源的映射,比如我們的所有靜態資源都在mystatic
目錄中,並且我們希望訪問靜態資源的的url都帶有/mystatic/
這個目錄前綴:
# 如設置為 /mystatic/* 的話只能匹配到第一層路徑,是無法訪問/mystatic/pages/目錄下的資源;
# 應改為 /mystatic/** 表示可以匹配任意層級的路徑
spring.mvc.static-path-pattern=/mystatic/**
spring.resources.static-locations=classpath:mystatic/
配置了指定的資源目錄后,默認的資源目錄下的文件則無法訪問了
方式二、實現WebMvcConfigurer接口
,並且重寫addResourceHandlers
方法就行,該操作與上面的方法得到的效果是一樣的
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/**").addResourceLocations("classpath:/aaa/");
}
}
注:上述兩種方法同時配置的話,配置類會覆蓋配置文件的配置。
SpringBoot訪問templates目錄下的html靜態頁面
實際開發中,html頁面不建議放在static目錄下,而是放在templates目錄中。 一般使用spring boot默認為我們創建的static目錄來放置css、圖片、js等靜態資源即可。但templates目錄的資源默認是受保護的,沒有開放訪問權限。這是因為templates文件夾,是放置模板文件的,因此需要視圖解析器來解析它。所以必須通過服務器內部進行訪問,也就是要走控制器 → 服務 → 視圖解析器這個流程才行。
要訪問templates目錄下的html頁面,還需要引入下面這個模板引擎,然后才能通過Controller來進行訪問。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
注:在使用模板引擎的時候,控制器不要用@RestController,因為它返回的是json數據格式,而我們要的是html頁面。
thymeleaf 模板配置:
spring:
#thymeleaf模板配置
thymeleaf:
cache: false # 這個開發配置為false,避免改了模板還要重啟服務器
prefix: classpath:/templates/ #模板文件視圖前綴,默認是classpath:/templates/,可不用配置
suffix: .html #模板文件視圖后綴,默認是.html,可不用配置
check-template-location: true #檢查模板位置,可不用配置
encoding: utf-8 #編碼字符集,默認為utf-8,可不用配置
mode: HTML #模板的模式,默認為HTML,可不用配置
servlet:
content-type: text/html #模板的內容類型,默認為text/html,可不用配置