Springboot系列(四)web靜態(tài)資源配置
引言:
SpringBoot web項(xiàng)目開(kāi)發(fā)中往往會(huì)涉及到一些靜態(tài)資源的使用吠昭,比如說(shuō)圖片怎诫,css樣式幻妓,js等等劫拢,今天我們來(lái)講講這些常見(jiàn)的靜態(tài)資源應(yīng)該放在哪個(gè)位置,怎么放在自己想放的位置妹沙。
1. 項(xiàng)目創(chuàng)建
我們先創(chuàng)建一個(gè)空的項(xiàng)目距糖,項(xiàng)目的依賴(lài)配置為starter-web依賴(lài)牵寺,創(chuàng)建好的項(xiàng)目下面有一個(gè)resources文件夾,里面有一些空的默認(rèn)的文件夾趣斤,然后有一個(gè)配置文件黎休。
templates文件下面一般是放置模板頁(yè)面的势腮,比如html捎拯,jsp之類(lèi)的,static文件一般是是放置靜態(tài)資源座菠,比如說(shuō)浴滴,圖片升略,文件等等品嚣。
我們放置了文件或者是圖片就需要訪問(wèn)這個(gè)文件翰撑,看看怎么才能有效的實(shí)現(xiàn)訪問(wèn)這些靜態(tài)資源文件啊央,以及自己訪問(wèn)自己定義好的資源訪問(wèn)路徑。
2. 資源文件訪問(wèn)與配置
一般來(lái)說(shuō)逝撬,我們是做前后端分離的宪潮,Springboot就作為后端狡相,但是Springboot依然支持有html文件等谣光,實(shí)現(xiàn)前后端在一個(gè)項(xiàng)目里面芬为。也就是Springboot web項(xiàng)目。
首先氧敢,我們?cè)趖emplates文件夾下面創(chuàng)建一個(gè)名為index的html5頁(yè)面孙乖,然后隨便寫(xiě)一點(diǎn)東西,然后在配置文件中弯屈,配置一個(gè)項(xiàng)目啟動(dòng)端口资厉。
html5文件
配置文件端口配置不再講解宴偿,前一期里面有配置文件詳解窄刘,不會(huì)的可以回去看看娩践。
啟動(dòng)項(xiàng)目欺矫,瀏覽器輸入:http://localhost:8088/index.html
你會(huì)發(fā)現(xiàn)頁(yè)面是404展氓,這時(shí)候我們是訪問(wèn)不了這個(gè)頁(yè)面的。然后你可能會(huì)說(shuō)http://localhost:8088/templates/index.html未妹,你會(huì)發(fā)現(xiàn)都不行都不行络它!
因?yàn)镾pringboot的默認(rèn)資源配置里面沒(méi)有這個(gè)templates路徑化戳,但是有static路徑。
Springboot中默認(rèn)的靜態(tài)資源路徑有一下幾種:
- classpath:/static,
- classpath:/public,
- classpath:/resources,
- classpath:/META-INF/resources,
classpath 在項(xiàng)目中就相當(dāng)于src/main/resources文件夾.
就是說(shuō)如果你把html文件直接放在static路徑下面是可以直接訪問(wèn)的掠廓,有兩種訪問(wèn)方式蟀瞧。
當(dāng)你添加了start-web的依賴(lài),resources下面是會(huì)默認(rèn)生成一個(gè)static文件夾以及templates文件夾铸屉。
如果要訪問(wèn)templates下面的靜態(tài)資源是需要自己在配置文件里面配置的抬探。
spring.resources.static-locations=classpath:templates/
我們配置了靜態(tài)資源路徑映射之后,我們只能訪問(wèn)這個(gè)路徑下面的資源椰于,也就是相當(dāng)于自定義了靜態(tài)資源路徑,就是說(shuō)默認(rèn)的靜態(tài)資源路徑都會(huì)失效仪搔。
有兩種訪問(wèn)靜態(tài)資源的方式瘾婿,一種是直接通過(guò)特定的URL訪問(wèn):我們配置好后,啟動(dòng)項(xiàng)目烤咧,瀏覽器輸入:http://localhost:8088/index.html 就可以正常訪問(wèn)我們的靜態(tài)資源了偏陪。
效果圖如下
然后還有一種訪問(wèn)資源的方法。是使用代碼是實(shí)現(xiàn)的煮嫌。
我們?cè)诤蛦?dòng)文件同級(jí)目錄下面創(chuàng)建一個(gè)controller文件夾笛谦,然后創(chuàng)建一個(gè)Testcontroller,代碼如下:
/**
* @author 全棧學(xué)習(xí)筆記
* @date 2020/4/12 12:20
* @description
*/
@Controller
public class TestController {
@RequestMapping("/getHtml")
public String getHtml(){
return "index.html";
}
}
說(shuō)明:這個(gè)@Controller ,意思標(biāo)記這個(gè)類(lèi)為控制類(lèi)昌阿,或者說(shuō)他是一個(gè)Springmvc controller對(duì)象饥脑,標(biāo)記之后,默認(rèn)這個(gè)類(lèi)的所有方法返回的是一個(gè)頁(yè)面懦冰。然后這個(gè)@RequestMapping的注解是一個(gè)用來(lái)處理請(qǐng)求地址映射的注解笋颤,可用于類(lèi)或方法上。用于方法之上時(shí),你可以通過(guò)URL直接訪問(wèn)這個(gè)方法清焕。它還有一些其他的參數(shù),這里就不講解了键畴。后面會(huì)出一期Springboot常用注解的說(shuō)明咏删。有興趣的可以 wx 搜索 全棧學(xué)習(xí)筆記嘀粱。
到這里宛篇,我們就可以利用自定義URL訪問(wèn)靜態(tài)資源了。在瀏覽器里面輸入:http://localhost:8088/getHtml 也能正常訪問(wèn)靜態(tài)資源涯冠。圖片也是一樣的赛糟。
3. 其他靜態(tài)資源路徑配置方式
1. 繼承WebMvcConfigurerAdapter
我們通過(guò)重寫(xiě)這個(gè)類(lèi)的addResourceHandlers方法,定義資源路徑
/**
* @author 全棧學(xué)習(xí)筆記
* @date 2020/4/12 15:46
* @description
*/
@Configuration
public class WebConfig extends WebMvcConfigurerAdapter {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/**").addResourceLocations("/","classpath:templates/");
super.addResourceHandlers(registry);
}
}
2. 優(yōu)化配置
你會(huì)看到之前的那種利用代碼的URL路徑訪問(wèn)靜態(tài)資源文件的寫(xiě)法篓像,我們需要在返回的地方寫(xiě)上文件的名稱(chēng)以及文件的后綴名鸵鸥,當(dāng)我們要返回某一類(lèi)型的文件時(shí)宋税,這樣寫(xiě)就相對(duì)比較麻煩,所以我們可以通過(guò)以下配置來(lái)解決這個(gè)問(wèn)題阔墩。
#加前綴
spring.mvc.view.prefix=/
#加后綴
spring.mvc.view.suffix=.html
通過(guò)以上的配置,我們之前的controller里面的方法返回就可以寫(xiě)成這樣。
@RequestMapping("/getHtml")
public String getHtml(){
return "index";
}
總結(jié):
靜態(tài)資源配置路徑的兩種常用方式: 一種是默認(rèn)配置,一種是自定義配置本昏,自定義配置可以是代碼配置概耻,可以是配置文件里面配置童漩。這兩種配置方式都會(huì)使原來(lái)默認(rèn)的配置方式失效侧馅。
靜態(tài)資源的訪問(wèn)方式有兩種:一種是自己用代碼定義路徑,然后訪問(wèn),一種是直接利用特定的URL方式訪問(wèn)靜態(tài)資源。