1. 程式人生 > >SpringBoot學習_webjars和靜態資源對映規則

SpringBoot學習_webjars和靜態資源對映規則

SpringBoot簡介

使用SpringBoot

  1. 建立SpringBoot應用,選中我們需要的模組;
    在這裡插入圖片描述
  2. SpringBoot已經預設將這些場景配置好了,只需要在配置檔案中指定少量配置就可以執行起來
  3. 自己編寫業務程式碼就可以了

自動配置原理
xxxxAutoConfiguration:幫我們給容器中自動配置元件
xxxxProperties:配置類,用來封裝配置檔案的內容;

SpringBoot對靜態資源的對映規則

WebMvcAutoConfiguration類中有這麼一段程式碼(IDEA中你可以按住ctrl+shift+alt+N來跳轉到你想要檢視的類

):

//新增資源對映
public void addResourceHandlers(ResourceHandlerRegistry registry) {
            if (!this.resourceProperties.isAddMappings()) {
                logger.debug("Default resource handling disabled");
            } else {
                Duration cachePeriod = this.resourceProperties.getCache
().getPeriod(); CacheControl cacheControl = this.resourceProperties.getCache().getCachecontrol().toHttpCacheControl(); if (!registry.hasMappingForPattern("/webjars/**")) { this.customizeResourceHandlerRegistration(registry.addResourceHandler(new String
[]{"/webjars/**"}).addResourceLocations(new String[]{"classpath:/META-INF/resources/webjars/"}).setCachePeriod(this.getSeconds(cachePeriod)).setCacheControl(cacheControl)); } String staticPathPattern = this.mvcProperties.getStaticPathPattern(); if (!registry.hasMappingForPattern(staticPathPattern)) { this.customizeResourceHandlerRegistration(registry.addResourceHandler(new String[]{staticPathPattern}).addResourceLocations(getResourceLocations(this.resourceProperties.getStaticLocations())).setCachePeriod(this.getSeconds(cachePeriod)).setCacheControl(cacheControl)); } } }

跳轉到ResourceProperties中:這個類可以設定和靜態資源有關的引數,比如快取時間等

@ConfigurationProperties(
    prefix = "spring.resources",
    ignoreUnknownFields = false
)
public class ResourceProperties {

所有 /webjars/** ,都去 classpath:/META-INF/resources/webjars/找資源;
什麼是webjars?點進去就知道了
webjars就是以jar包的方式引入靜態資源;
在這裡插入圖片描述
選好版本號後把依賴貼上複製進pom.xml就可以了
在這裡插入圖片描述
可以看到這個資料夾的路徑跟上面那個新增資源對映的類說的一樣:classpath:/META-INF/resources/webjars/
我們可以到瀏覽器中訪問試一下:http://localhost:8080/webjars/jquery/3.3.1-1/jquery.js
在這裡插入圖片描述

如圖所示是可以訪問到的

/**:訪問當前專案的任何資源,只要沒人處理,都會去(靜態資源的資料夾下)找對映
靜態資源的資料夾:

"classpath:/META‐INF/resources/",
"classpath:/resources/",
"classpath:/static/",
"classpath:/public/"
"/":當前專案的根路徑

例子,我們測試"classpath:/resources/"這個
在這裡插入圖片描述
然後我們就可以到瀏覽器中http://localhost:8080/asserts/js/Chart.min.js訪問了
如果要改變為我們自定義的路徑,在配置檔案中用spring.resources.static-locations配置即可,多個路徑用,分隔
例子:

spring.resources.static-locations=classpath:/hello/,classpath:/nyh/

還有一個方法:welcomePageHandlerMapping

		//配置首頁的對映
		@Bean
        public WelcomePageHandlerMapping welcomePageHandlerMapping(ApplicationContext applicationContext) {
            return new WelcomePageHandlerMapping(new TemplateAvailabilityProviders(applicationContext), applicationContext, this.getWelcomePage(), this.mvcProperties.getStaticPathPattern());
        }

意思是在靜態資原始檔夾下的所有index.html頁面;會被/**對映
比如你在瀏覽器輸入localhost:8080/,因為/滿足/**,所以會找到index頁面映射出來

還有就是頁面的icon圖示的配置
在這裡插入圖片描述

把圖示放在在靜態資原始檔下SpringBoot就會自動找到它並配置好,圖示名字要叫favicon.ico
以下是自動配置的程式碼

@Bean
            public SimpleUrlHandlerMapping faviconHandlerMapping() {
                SimpleUrlHandlerMapping mapping = new SimpleUrlHandlerMapping();
                mapping.setOrder(-2147483647);
                mapping.setUrlMap(Collections.singletonMap("**/favicon.ico", this.faviconRequestHandler()));
                return mapping;
            }