首頁  >  文章  >  Java  >  如何透過原始碼探究靜態資源的映射規則

如何透過原始碼探究靜態資源的映射規則

醉折花枝作酒筹
醉折花枝作酒筹轉載
2021-05-06 09:36:492150瀏覽

本篇文章為大家介紹一下透過原始碼探究靜態資源映射規則的方法。有一定的參考價值,有需要的朋友可以參考一下,希望對大家有幫助。

如何透過原始碼探究靜態資源的映射規則

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中文網其他相關文章!

陳述:
本文轉載於:csdn.net。如有侵權,請聯絡admin@php.cn刪除