小編帶著小白看springboot源碼3

上一節(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ā)框架掌握熟練的可以加群。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末映挂,一起剝皮案震驚了整個(gè)濱河市泽篮,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌柑船,老刑警劉巖帽撑,帶你破解...
    沈念sama閱讀 222,183評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異鞍时,居然都是意外死亡油狂,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門寸癌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)专筷,“玉大人,你說(shuō)我怎么就攤上這事蒸苇×子迹” “怎么了?”我有些...
    開封第一講書人閱讀 168,766評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵溪烤,是天一觀的道長(zhǎng)味咳。 經(jīng)常有香客問(wèn)我庇勃,道長(zhǎng),這世上最難降的妖魔是什么槽驶? 我笑而不...
    開封第一講書人閱讀 59,854評(píng)論 1 299
  • 正文 為了忘掉前任责嚷,我火速辦了婚禮,結(jié)果婚禮上掂铐,老公的妹妹穿的比我還像新娘罕拂。我一直安慰自己,他們只是感情好全陨,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,871評(píng)論 6 398
  • 文/花漫 我一把揭開白布爆班。 她就那樣靜靜地躺著,像睡著了一般辱姨。 火紅的嫁衣襯著肌膚如雪柿菩。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,457評(píng)論 1 311
  • 那天雨涛,我揣著相機(jī)與錄音枢舶,去河邊找鬼。 笑死替久,一個(gè)胖子當(dāng)著我的面吹牛祟辟,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播侣肄,決...
    沈念sama閱讀 40,999評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼旧困,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了稼锅?” 一聲冷哼從身側(cè)響起吼具,我...
    開封第一講書人閱讀 39,914評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎矩距,沒(méi)想到半個(gè)月后拗盒,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,465評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡锥债,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,543評(píng)論 3 342
  • 正文 我和宋清朗相戀三年陡蝇,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片哮肚。...
    茶點(diǎn)故事閱讀 40,675評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡登夫,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出允趟,到底是詐尸還是另有隱情恼策,我是刑警寧澤,帶...
    沈念sama閱讀 36,354評(píng)論 5 351
  • 正文 年R本政府宣布潮剪,位于F島的核電站涣楷,受9級(jí)特大地震影響分唾,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜狮斗,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,029評(píng)論 3 335
  • 文/蒙蒙 一绽乔、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧碳褒,春花似錦折砸、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)鹃觉。三九已至专酗,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間盗扇,已是汗流浹背祷肯。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留疗隶,地道東北人佑笋。 一個(gè)月前我還...
    沈念sama閱讀 49,091評(píng)論 3 378
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像斑鼻,于是被迫代替她去往敵國(guó)和親蒋纬。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,685評(píng)論 2 360

推薦閱讀更多精彩內(nèi)容

  • SpringMVC原理分析 Spring Boot學(xué)習(xí) 5坚弱、Hello World探究 1蜀备、POM文件 1、父項(xiàng)目...
    jack_jerry閱讀 1,309評(píng)論 0 1
  • https://github.com/cuzz1/springboot-learning 四荒叶、Web開發(fā) 1碾阁、簡(jiǎn)介...
    cuzz_閱讀 2,440評(píng)論 0 5
  • springBoot初級(jí)入門 獲取配置文件中的值@ConfigurationProperties 1、這個(gè)注解默認(rèn)...
    愛撒謊的男孩閱讀 1,717評(píng)論 1 10
  • 1些楣、簡(jiǎn)介 使用SpringBoot脂凶; 1)、創(chuàng)建SpringBoot應(yīng)用愁茁,選中我們需要的模塊蚕钦; 2)、Spring...
    July_whj閱讀 677評(píng)論 1 9
  • 一鹅很、Spring Boot 入門 1冠桃、Spring Boot 簡(jiǎn)介 簡(jiǎn)化Spring應(yīng)用開發(fā)的一個(gè)框架;整個(gè)Spr...
    Y了個(gè)J閱讀 6,682評(píng)論 1 6