您好,登錄后才能下訂單哦!
這篇文章主要講解了“SpringBoot Web開發靜態資源處理的方法是什么”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“SpringBoot Web開發靜態資源處理的方法是什么”吧!
網頁訪問/webjars/** 會在 classpath:/META-INF/resources/webjars/ 找資源
網頁訪問"/**" 訪問當前項目的任何資源,都去(靜態資源的文件夾)找映射
歡迎頁; 靜態資源文件夾下的所有index.html頁面;被"/**"映射;
favicon.ico :所有的 **/favicon.ico 都是在靜態資源文件下找;
接下來開始學習SpringBoot與Web開發,其實SpringBoot的東西用起來非常簡單,因為SpringBoot最大的特點就是自動裝配。
使用SpringBoot的步驟:
1、創建一個SpringBoot應用,選擇我們需要的模塊,SpringBoot就會默認將我們的需要的模塊自動配置好
2、手動在配置文件中配置部分配置項目就可以運行起來了
3、專注編寫業務代碼,不需要考慮以前那樣一大堆的配置了。
要熟悉掌握開發,之前學習的自動配置的原理一定要搞明白!
比如SpringBoot到底幫我們配置了什么?我們能不能修改?我們能修改哪些配置?我們能不能擴展?
向容器中自動配置組件 :*** Autoconfiguration
自動配置類,封裝配置文件的內容:***Properties
沒事就找找類,看看自動裝配原理!
首先,我們搭建一個普通的SpringBoot項目,回顧一下HelloWorld程序!
寫請求非常簡單,那我們要引入我們前端資源,我們項目中有許多的靜態資源,比如css,js等文件,這個SpringBoot怎么處理呢?
如果我們是一個web應用,我們的main下會有一個webapp,我們以前都是將所有的頁面導在這里面的,對吧!但是我們現在的pom呢,打包方式是為jar的方式,那么這種方式SpringBoot能不能來給我們寫頁面呢?當然是可以的,但是SpringBoot對于靜態資源放置的位置,是有規定的!
我們先來聊聊這個靜態資源映射規則:
SpringBoot中,SpringMVC的web配置都在 WebMvcAutoConfiguration 這個配置類里面;
我們可以去看看 WebMvcAutoConfigurationAdapter 中有很多配置方法;
有一個方法:addResourceHandlers 添加資源處理
@Override public void addResourceHandlers(ResourceHandlerRegistry registry) { if (!this.resourceProperties.isAddMappings()) { // 已禁用默認資源處理 logger.debug("Default resource handling disabled"); return; } // 緩存控制 Duration cachePeriod = this.resourceProperties.getCache().getPeriod(); CacheControl cacheControl = this.resourceProperties.getCache().getCachecontrol().toHttpCacheControl(); // webjars 配置 if (!registry.hasMappingForPattern("/webjars/**")) { customizeResourceHandlerRegistration(registry.addResourceHandler("/webjars/**") .addResourceLocations("classpath:/META-INF/resources/webjars/") .setCachePeriod(getSeconds(cachePeriod)).setCacheControl(cacheControl)); } // 靜態資源配置 String staticPathPattern = this.mvcProperties.getStaticPathPattern(); if (!registry.hasMappingForPattern(staticPathPattern)) { customizeResourceHandlerRegistration(registry.addResourceHandler(staticPathPattern) .addResourceLocations(getResourceLocations(this.resourceProperties.getStaticLocations())) .setCachePeriod(getSeconds(cachePeriod)).setCacheControl(cacheControl)); } }
讀一下源代碼:比如所有的 /webjars/** , 都需要去 classpath:/META-INF/resources/webjars/ 找對應的資源;
Webjars本質就是以jar包的方式引入我們的靜態資源 , 我們以前要導入一個靜態資源文件,直接導入即可。
使用SpringBoot需要使用Webjars,我們可以去搜索一下:
網站:https://www.webjars.org
要使用jQuery,我們只要要引入jQuery對應版本的pom依賴即可!
<dependency> <groupId>org.webjars</groupId> <artifactId>jquery</artifactId> <version>3.4.1</version> </dependency>
導入完畢,查看webjars目錄結構,并訪問Jquery.js文件!
訪問:只要是靜態資源,SpringBoot就會去對應的路徑尋找資源,我們這里訪問:http://localhost:8080/webjars/jquery/3.4.1/jquery.js
那我們項目中要是使用自己的靜態資源該怎么導入呢?我們看下一行代碼;
我們去找staticPathPattern發現第二種映射規則 :/** , 訪問當前的項目任意資源,它會去找 resourceProperties 這個類,我們可以點進去看一下分析:
// 進入方法 public String[] getStaticLocations() { return this.staticLocations; } // 找到對應的值 private String[] staticLocations = CLASSPATH_RESOURCE_LOCATIONS; // 找到路徑 private static final String[] CLASSPATH_RESOURCE_LOCATIONS = { "classpath:/META-INF/resources/", "classpath:/resources/", "classpath:/static/", "classpath:/public/">
ResourceProperties 可以設置和我們靜態資源有關的參數;這里面指向了它會去尋找資源的文件夾,即上面數組的內容。
所以得出結論,以下四個目錄存放的靜態資源可以被我們識別:
"classpath:/META-INF/resources/" "classpath:/resources/" "classpath:/static/" "classpath:/public/"
我們可以在resources根目錄下新建對應的文件夾,都可以存放我們的靜態文件;
比如我們訪問 http://localhost:8080/1.js , 他就會去這些文件夾中尋找對應的靜態資源文件;
優先級順序為:META-INF/resources > resources > static > public
應用示例(http://localhost:8080/demo.jpg 指的是依次去"classpath:/META-INF/resources/", "classpath:/resources/", "classpath:/static/", "classpath:/public/"去找demo.jpg圖片)
我們也可以自己通過配置文件來指定一下,哪些文件夾是需要我們放靜態資源文件的,在application.properties中配置;
@Configuration public class MyWebMvcConfigurerAdapter extends WebMvcConfigurerAdapter { /** * 配置靜態訪問資源 * @param registry */ @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/mypath/**").addResourceLocations("classpath:/myresources/"); super.addResourceHandlers(registry); } }
一旦自己定義了靜態文件夾的路徑,原來的自動配置就都會失效了!
靜態資源文件夾說完后,我們繼續向下看源碼!可以看到一個歡迎頁的映射,就是我們的首頁!
@Bean public WelcomePageHandlerMapping welcomePageHandlerMapping(ApplicationContext applicationContext, FormattingConversionService mvcConversionService, ResourceUrlProvider mvcResourceUrlProvider) { WelcomePageHandlerMapping welcomePageHandlerMapping = new WelcomePageHandlerMapping( new TemplateAvailabilityProviders(applicationContext), applicationContext, getWelcomePage(), // getWelcomePage 獲得歡迎頁 this.mvcProperties.getStaticPathPattern()); welcomePageHandlerMapping.setInterceptors(getInterceptors(mvcConversionService, mvcResourceUrlProvider)); return welcomePageHandlerMapping; }
點進去繼續看
private Optional<Resource> getWelcomePage() { String[] locations = getResourceLocations(this.resourceProperties.getStaticLocations()); // ::是java8 中新引入的運算符 // Class::function的時候function是屬于Class的,應該是靜態方法。 // this::function的funtion是屬于這個對象的。 // 簡而言之,就是一種語法糖而已,是一種簡寫 return Arrays.stream(locations).map(this::getIndexHtml).filter(this::isReadable).findFirst(); } // 歡迎頁就是一個location下的的 index.html 而已 private Resource getIndexHtml(String location) { return this.resourceLoader.getResource(location + "index.html"); }
歡迎頁,靜態資源文件夾下的所有 index.html 頁面;被 /** 映射。
比如我訪問 http://localhost:8080/ ,就會找靜態資源文件夾下的 index.html
新建一個 index.html ,在我們上面的3個目錄中任意一個;然后訪問測試 http://localhost:8080/ 看結果!
關于網站圖標說明:
與其他靜態資源一樣,Spring Boot在配置的靜態內容位置中查找 favicon.ico。如果存在這樣的文件,它將自動用作應用程序的favicon。
1、關閉SpringBoot默認圖標
#關閉默認圖標 spring.mvc.favicon.enabled=false
2、自己放一個圖標在靜態資源目錄下,我放在static目錄下
3、清除瀏覽器緩存!刷新網頁,發現圖標已經變成自己的了!
感謝各位的閱讀,以上就是“SpringBoot Web開發靜態資源處理的方法是什么”的內容了,經過本文的學習后,相信大家對SpringBoot Web開發靜態資源處理的方法是什么這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。