SpringBoot靜態資源的訪問


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,可不用配置

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM