上一節(jié)講到了快速新建一個(gè)springboot應(yīng)用贬墩,以及springboot的自動(dòng)配置類起作用的時(shí)機(jī),并且一起看了一個(gè)自動(dòng)配置類的源碼蔼水。
這一節(jié)我們來(lái)粗略看看當(dāng)用戶在瀏覽器輸入一個(gè)url震糖,怎么樣返回一個(gè)靜態(tài)HTML和動(dòng)態(tài)網(wǎng)頁(yè)录肯,以及其中的原理趴腋。
在此之前說(shuō)一點(diǎn),springboot不支持jsp,也就是說(shuō)以前我們寫的jsp頁(yè)面頁(yè)面在這里解析不了优炬,換句話說(shuō)颁井,springboot肯定有一個(gè)自己獨(dú)有的類似jsp的技術(shù)來(lái)實(shí)現(xiàn)動(dòng)態(tài)網(wǎng)頁(yè)的訪問(wèn),這點(diǎn)毫無(wú)疑問(wèn)蠢护,不然一個(gè)網(wǎng)站只能訪問(wèn)html網(wǎng)頁(yè)雅宾,太單調(diào)了。
springboot的這個(gè)獨(dú)有的技術(shù)是thymeleaf葵硕,下面就簡(jiǎn)要說(shuō)說(shuō)thymeleaf眉抬,要想徹底學(xué)會(huì)還需要自己多查查資料,我這里只能說(shuō)一個(gè)大概的懈凹。
1.初識(shí)thymeleaf
作為一個(gè)類似于jsp的技術(shù)蜀变,用腳趾頭想肯定是類似標(biāo)簽的東西、符合thymeleaf語(yǔ)法介评,經(jīng)過(guò)thymeleaf引擎解析(thymeleaf引擎又是個(gè)什么東西呢库北?很抽象,我也說(shuō)不好說(shuō)们陆;總之寒瓦,想想jsp引擎,不就是將那些jsp頁(yè)面里的所有標(biāo)簽解析成servlet坪仇,然后向用戶響應(yīng)servlet杂腰,第一次請(qǐng)求要先將jsp文件里面的東西全部解析成servlet,然后還要編譯成.class文件椅文,運(yùn)行颈墅,然后才能響應(yīng)簡(jiǎn)直了,而且jsp開發(fā)比較慢雾袱,以及后期的項(xiàng)目部署花費(fèi)比較高恤筛,雖然說(shuō)jsp第二次以及之后運(yùn)行速度很快、安全性比較好芹橡,但是市場(chǎng)上用jsp開發(fā)的大多是銀行啊這些國(guó)企毒坛,小企業(yè)是沒(méi)有那個(gè)經(jīng)濟(jì)用jsp開發(fā),扯遠(yuǎn)了林说。煎殷。。)
目錄結(jié)構(gòu)
用thymeleaf之前腿箩,導(dǎo)入依賴以及版本控制(這個(gè)可以不用springboot自帶的版本)豪直,以及在帶有thymeleaf的html文件加入名稱空間
pom.xml文件:
說(shuō)說(shuō)thymeleaf語(yǔ)法基本就是這樣一個(gè)模式,th:xx=“${xxx}”珠移,這里的xx可以是任意屬性值弓乙,假設(shè)有如下一個(gè)controller
打開success.html,
? 還有th:if? ?th:object? ?th:each等標(biāo)簽的運(yùn)用自己去試試末融,跟jsp里面的標(biāo)簽及其相似,這里不多說(shuō)了暇韧。根據(jù)上面的設(shè)置勾习,運(yùn)行,打開瀏覽器測(cè)試懈玻,打開heml源碼就能看到效果巧婶。
2.thymeleaf小知識(shí)
為什么controller里面返回的success,就會(huì)跳轉(zhuǎn)到template/success.html頁(yè)面涂乌,thymeleaf引擎就會(huì)將其解析艺栈,并響應(yīng)呢?而且靜態(tài)網(wǎng)頁(yè)為什么是放在那個(gè)static文件夾下湾盒,放在其他地方行嗎眼滤?這都是需要大概了解的
首先,我們打開這個(gè)類
我們打開ThymeleafProperties這個(gè)類历涝,可以看到一些屬性
這就很明顯了诅需,配置了前綴后綴,無(wú)非是視圖解析器調(diào)用這個(gè)類中的屬性荧库,然后和controller返回的字符串(就是所謂的邏輯視圖名)和這個(gè)前后綴拼接組成真正的視圖全路徑堰塌,再調(diào)用模板引擎去解析成最終的html,然后響應(yīng)分衫。
由此场刑,我們就要知道,thymeleaf文件就要放在類路徑下的template文件夾下蚪战,并且以.html結(jié)尾牵现,或者自己去主配置文件spring.thymeleaf.xx="xxx"去自定義位置。
3.靜態(tài)文件路徑解析
接下來(lái)是靜態(tài)文件夾邀桑,還記不記得前面的導(dǎo)入了很多的xxxAutoConfiguration瞎疼,這里的靜態(tài)文件位置就要用到一個(gè),就是WebMvcAutoConfiguration壁畸,這個(gè)自動(dòng)配置類其實(shí)就是相當(dāng)于ssm的springmvc配置贼急。
補(bǔ)充一個(gè)知識(shí)點(diǎn),webjars網(wǎng)站https://www.webjars.org/捏萍,這里將很多的東西都打包成了jar包太抓,想要用什么只需要導(dǎo)入相關(guān)的依賴就可以了。
比如springboot會(huì)用到j(luò)query令杈,webjars的依賴走敌,然后html文件里引用就好。
打開這個(gè)類WebMvcAutoConfiguration逗噩,看到這個(gè)方法里里面
? 現(xiàn)在我們就要看看staticPathPattern到底是什么掉丽,點(diǎn)開getStaticPathPattern();------------->點(diǎn)開return xxx.staticPathPattern-------->看到private String staticPathPattern = "/**";
我們就明白了跌榔,訪問(wèn)路徑:我們只要在瀏覽器輸入localhost:8080/xxx都可以了
繼續(xù)分析this.resourceProperties.getStaticLocations()這個(gè),這代表springboot會(huì)去哪里找你想要的靜態(tài)文件
點(diǎn)開.getStaticLocations()------->點(diǎn)開return this.staticLocations;---------->private String[] staticLocations = RESOURCE_LOCATIONS;(點(diǎn)開RESOURCE_LOCATIONS),最后机打,你能看到如下代碼
結(jié)論:
1.假如你在瀏覽器輸入localhost:8080/webjars/xxx,springboot就會(huì)遍歷所有jar包下的webjars,直至找到xxx文件
2.假如你在瀏覽器輸入localhost:8080/xxx,那么springboot就會(huì)在如下的五個(gè)路徑下依次遍歷片迅,直到找到則個(gè)靜態(tài)文件残邀,否則,拋出異常
{"/",
"classpath:/META-INF/resources/",
"classpath:/resources/",
"classpath:/static/",
"classpath:/public/" };
3.假如在瀏覽器輸入localhost:8080/xxx(動(dòng)態(tài)網(wǎng)頁(yè))柑蛇,springboot就會(huì)去類路徑下template/xxx.html文件
在這里給大家提供一個(gè)學(xué)習(xí)交流的平臺(tái)芥挣,Java技術(shù)交流┟ 810309655
具有1-5工作經(jīng)驗(yàn)的,面對(duì)目前流行的技術(shù)不知從何下手耻台,需要突破技術(shù)瓶頸的可以加群空免。
在公司待久了,過(guò)得很安逸盆耽,但跳槽時(shí)面試碰壁蹋砚。需要在短時(shí)間內(nèi)進(jìn)修、跳槽拿高薪的可以加群摄杂。
如果沒(méi)有工作經(jīng)驗(yàn)坝咐,但基礎(chǔ)非常扎實(shí),對(duì)java工作機(jī)制析恢,常用設(shè)計(jì)思想墨坚,常用java開發(fā)框架掌握熟練的可以加群。