本篇文章為大家介紹一下透過原始碼探究靜態資源映射規則的方法。有一定的參考價值,有需要的朋友可以參考一下,希望對大家有幫助。
Spring Boot——透過原始碼探究靜態資源的映射規則
我們開發一個Spring Boot項目,肯定要導入許多的靜態資源,例如css ,js等檔案
如果我們是一個web應用,我們的main下會有一個webapp,我們以前都是將所有的頁面導在這裡面的,對吧!但是我們現在的pom呢,打包方式是為jar的方式,那麼這種方式SpringBoot能不能來為我們寫頁面呢?當然是可以的,但是SpringBoot對於靜態資源放置的位置,是有規定的!
靜態資源映射規則
第一種映射規則
#SpringBoot中,SpringMVC的web配置都在WebMvcAutoConfiguration 這個配置類別裡面;
WebMvcAutoConfigurationAdapter 中有很多設定方法;其中就有一個新增資源處理方法:addResourceHandlers (),原始碼如下。
@Override protected void addResourceHandlers(ResourceHandlerRegistry registry) { super.addResourceHandlers(registry); if (!this.resourceProperties.isAddMappings()) { logger.debug("Default resource handling disabled"); return; } ServletContext servletContext = getServletContext(); addResourceHandler(registry, "/webjars/**", "classpath:/META-INF/resources/webjars/"); addResourceHandler(registry, this.mvcProperties.getStaticPathPattern(), (registration) -> { registration.addResourceLocations(this.resourceProperties.getStaticLocations()); if (servletContext != null) { registration.addResourceLocations(new ServletContextResource(servletContext, SERVLET_LOCATION)); } }); }
WebJars是將客戶端(瀏覽器)資源(JavaScript,Css等)打成jar包文件,以對資源進行統一依賴管理。 WebJars的jar包部署在Maven中央倉庫上。
我們可以到webjars官網上找到自己需要的資源,在自己的工程中加入maven依賴,即可直接使用這些資源了。
例如,我們要導入jquery資源
<dependency> <groupId>org.webjars</groupId> <artifactId>jquery</artifactId> <version>3.6.0</version></dependency>
導入後我們可以透過資源路徑找到資源的存放位置並訪問,我們在webjars網站導入的資源都符合下圖的結構
透過路徑訪問,成功存取靜態資源!
第二個映射規則
#下面我們繼續分析原始碼
getStaticPathpattern():取得靜態路徑模式,點進去看一下原始碼
public String getStaticPathPattern() { return this.staticPathPattern; }
再看一下staticPathPattern的原始碼
/**
就是目前目錄下的所有靜態資源都能識別,但是目前目錄下具體指的又是什麼呢?我們點開resourceProperties的源碼便可看出來。原始碼如下:
上面原始碼很清楚的給了我們四個靜態資源路徑,所以只要是這四個目錄下的靜態資源,都可以直接取得。
我們來測試一下,先補齊上面的目錄,然後再resource目錄放一個js資源
啟動springboot應用測試:成功存取靜態資源!
以下四個目錄存放的靜態資源可以被我們辨識:
"classpath:/META-INF/resources/""classpath:/resources/""classpath:/static/""classpath:/public/"
注意:
第一個目錄的存取路徑為localhost:8080/webjars/資源目錄結構,後面三個存取路徑為localhost:8080/資源名稱
第二種映射規則的優先權為:resources>static(預設)>public
自訂靜態資源路徑
#我們可以自己透過設定檔來指定一下,哪些資料夾是需要我們放靜態資源檔案的,在application.properties中配置;
spring.resources.static-locations=classpath:/coding/,classpath:/cheng/
但是透過下面原始碼我們可以看出,如果自訂了資源路徑,那麼上面預設的四個路徑就失效了,所以最好不要自訂路徑,使用springboot幫我們自動配置好的就行。
if (!this.resourceProperties.isAddMappings()) { logger.debug("Default resource handling disabled"); return; }
相關免費學習推薦:java基礎教學
以上是如何透過原始碼探究靜態資源的映射規則的詳細內容。更多資訊請關注PHP中文網其他相關文章!