javascript
Web开发静态资源处理---SpringBoot
Web開發(fā)靜態(tài)資源處理
使用SpringBoot的步驟:
1、創(chuàng)建一個(gè)SpringBoot應(yīng)用,選擇我們需要的模塊,SpringBoot就會(huì)默認(rèn)將我們的需要的模塊自動(dòng)配置好
2、手動(dòng)在配置文件中配置部分配置項(xiàng)目就可以運(yùn)行起來了
3、專注編寫業(yè)務(wù)代碼,不需要考慮以前那樣一大堆的配置了。
要熟悉掌握開發(fā),之前學(xué)習(xí)的自動(dòng)配置的原理一定要搞明白!
比如SpringBoot到底幫我們配置了什么?我們能不能修改?我們能修改哪些配置?我們能不能擴(kuò)展?
- 向容器中自動(dòng)配置組件 :*** Autoconfiguration
- 自動(dòng)配置類,封裝配置文件的內(nèi)容:***Properties
沒事就找找類,看看自動(dòng)裝配原理!
第一種靜態(tài)資源映射規(guī)則
首先,我們搭建一個(gè)普通的SpringBoot項(xiàng)目,回顧一下HelloWorld程序!
寫請(qǐng)求非常簡單,那我們要引入我們前端資源,我們項(xiàng)目中有許多的靜態(tài)資源,比如css,js等文件,這個(gè)SpringBoot怎么處理呢?
如果我們是一個(gè)web應(yīng)用,我們的main下會(huì)有一個(gè)webapp,我們以前都是將所有的頁面導(dǎo)在這里面的,對(duì)吧!但是我們現(xiàn)在的pom呢,打包方式是為jar的方式,那么這種方式SpringBoot能不能來給我們寫頁面呢?當(dāng)然是可以的,但是SpringBoot對(duì)于靜態(tài)資源放置的位置,是有規(guī)定的!
我們先來聊聊這個(gè)靜態(tài)資源映射規(guī)則:
SpringBoot中,SpringMVC的web配置都在 WebMvcAutoConfiguration 這個(gè)配置類里面;
我們可以去看看 WebMvcAutoConfigurationAdapter 中有很多配置方法;
有一個(gè)方法:addResourceHandlers 添加資源處理
@Override public void addResourceHandlers(ResourceHandlerRegistry registry) {if (!this.resourceProperties.isAddMappings()) {// 已禁用默認(rèn)資源處理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));}// 靜態(tài)資源配置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/ 找對(duì)應(yīng)的資源;
webjars
Webjars本質(zhì)就是以jar包的方式引入我們的靜態(tài)資源 , 我們以前要導(dǎo)入一個(gè)靜態(tài)資源文件,直接導(dǎo)入即可。
使用SpringBoot需要使用Webjars,我們可以去搜索一下:
網(wǎng)站:https://www.webjars.org
要使用jQuery,我們只要要引入jQuery對(duì)應(yīng)版本的pom依賴即可!
<dependency><groupId>org.webjars</groupId><artifactId>jquery</artifactId><version>3.5.1</version></dependency>導(dǎo)入完畢,查看webjars目錄結(jié)構(gòu),并訪問Jquery.js文件!
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-MeVua5FK-1610005795544)(C:\Users\王東梁\AppData\Roaming\Typora\typora-user-images\image-20210107152253069.png)]
第二種靜態(tài)資源映射規(guī)則
那我們項(xiàng)目中要是使用自己的靜態(tài)資源該怎么導(dǎo)入呢?我們看下一行代碼;
我們?nèi)フ襰taticPathPattern發(fā)現(xiàn)第二種映射規(guī)則 :/** , 訪問當(dāng)前的項(xiàng)目任意資源,它會(huì)去找 resourceProperties 這個(gè)類,我們可以點(diǎn)進(jìn)去看一下分析:
// 進(jìn)入方法 public String[] getStaticLocations() { return this.staticLocations;} // 找到對(duì)應(yīng)的值 private String[] staticLocations = CLASSPATH_RESOURCE_LOCATIONS; // 找到路徑 private static final String[] CLASSPATH_RESOURCE_LOCATIONS = { "classpath:/META-INF/resources/", "classpath:/resources/", "classpath:/static/", "classpath:/public/" };ResourceProperties 可以設(shè)置和我們靜態(tài)資源有關(guān)的參數(shù);這里面指向了它會(huì)去尋找資源的文件夾,即上面數(shù)組的內(nèi)容。
所以得出結(jié)論,以下四個(gè)目錄存放的靜態(tài)資源可以被我們識(shí)別:
"classpath:/META-INF/resources/""classpath:/resources/""classpath:/static/""classpath:/public/"優(yōu)先級(jí)
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-bm1onWjE-1610005795546)(C:\Users\王東梁\AppData\Roaming\Typora\typora-user-images\image-20210107154153523.png)]
我們可以在resources根目錄下新建對(duì)應(yīng)的文件夾,都可以存放我們的靜態(tài)文件;
比如我們訪問 http://localhost:8080/1.js , 他就會(huì)去這些文件夾中尋找對(duì)應(yīng)的靜態(tài)資源文件;
總結(jié)
以上是生活随笔為你收集整理的Web开发静态资源处理---SpringBoot的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: r7000p怎么看配置?
- 下一篇: gradle idea java ssm