SpringBoot學習_webjars和靜態資源對映規則
SpringBoot簡介
使用SpringBoot
- 建立SpringBoot應用,選中我們需要的模組;
- SpringBoot已經預設將這些場景配置好了,只需要在配置檔案中指定少量配置就可以執行起來
- 自己編寫業務程式碼就可以了
自動配置原理
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;
}