小編帶著小白看springboot源碼3
這一節我們來粗略看看當用戶在瀏覽器輸入一個url,怎麽樣返回一個靜態HTML和動態網頁,以及其中的原理。
在此之前說一點,springboot不支持jsp,也就是說以前我們寫的jsp頁面頁面在這裏解析不了,換句話說,springboot肯定有一個自己獨有的類似jsp的技術來實現動態網頁的訪問,這點毫無疑問,不然一個網站只能訪問html網頁,太單調了。
springboot的這個獨有的技術是thymeleaf,下面就簡要說說thymeleaf,要想徹底學會還需要自己多查查資料,我這裏只能說一個大概的。
1.初識thymeleaf
作為一個類似於jsp的技術,用腳趾頭想肯定是類似標簽的東西、符合thymeleaf語法,經過thymeleaf引擎解析(thymeleaf引擎又是個什麽東西呢?很抽象,我也說不好說;總之,想想jsp引擎,不就是將那些jsp頁面裏的所有標簽解析成servlet,然後向用戶響應servlet,第一次請求要先將jsp文件裏面的東西全部解析成servlet,然後還要編譯成.class文件,運行,然後才能響應簡直了,而且jsp開發比較慢,以及後期的項目部署花費比較高,雖然說jsp第二次以及之後運行速度很快、安全性比較好,但是市場上用jsp開發的大多是銀行啊這些國企,小企業是沒有那個經濟用jsp開發,扯遠了。。。)
目錄結構
用thymeleaf之前,導入依賴以及版本控制(這個可以不用springboot自帶的版本),以及在帶有thymeleaf的html文件加入名稱空間
pom.xml文件:
說說thymeleaf語法基本就是這樣一個模式,th:xx=“${xxx}”,這裏的xx可以是任意屬性值,假設有如下一個controller
打開success.html,
還有th:if th:object th:each等標簽的運用自己去試試,跟jsp裏面的標簽及其相似,這裏不多說了。根據上面的設置,運行,打開瀏覽器測試,打開heml源碼就能看到效果。
2.thymeleaf小知識
為什麽controller裏面返回的success,就會跳轉到template/success.html頁面,thymeleaf引擎就會將其解析,並響應呢?而且靜態網頁為什麽是放在那個static文件夾下,放在其他地方行嗎?這都是需要大概了解的
首先,我們打開這個類
我們打開ThymeleafProperties這個類,可以看到一些屬性
這就很明顯了,配置了前綴後綴,無非是視圖解析器調用這個類中的屬性,然後和controller返回的字符串(就是所謂的邏輯視圖名)和這個前後綴拼接組成真正的視圖全路徑,再調用模板引擎去解析成最終的html,然後響應。
由此,我們就要知道,thymeleaf文件就要放在類路徑下的template文件夾下,並且以.html結尾,或者自己去主配置文件spring.thymeleaf.xx="xxx"去自定義位置。
3.靜態文件路徑解析
接下來是靜態文件夾,還記不記得前面的導入了很多的xxxAutoConfiguration,這裏的靜態文件位置就要用到一個,就是WebMvcAutoConfiguration,這個自動配置類其實就是相當於ssm的springmvc配置。
補充一個知識點,webjars網站https://www.webjars.org/,這裏將很多的東西都打包成了jar包,想要用什麽只需要導入相關的依賴就可以了。
比如springboot會用到jquery,webjars的依賴,然後html文件裏引用就好。
打開這個類WebMvcAutoConfiguration,看到這個方法裏裏面
現在我們就要看看staticPathPattern到底是什麽,點開getStaticPathPattern();------------->點開return xxx.staticPathPattern-------->看到private String staticPathPattern = "/**";
我們就明白了,訪問路徑:我們只要在瀏覽器輸入localhost:8080/xxx都可以了
繼續分析this.resourceProperties.getStaticLocations()這個,這代表springboot會去×××你想要的靜態文件
點開.getStaticLocations()------->點開return this.staticLocations;---------->private String[] staticLocations = RESOURCE_LOCATIONS;(點開RESOURCE_LOCATIONS),最後,你能看到如下代碼
結論:
1.假如你在瀏覽器輸入localhost:8080/webjars/xxx,springboot就會遍歷所有jar包下的webjars,直至找到xxx文件
2.假如你在瀏覽器輸入localhost:8080/xxx,那麽springboot就會在如下的五個路徑下依次遍歷,直到找到則個靜態文件,否則,拋出異常
{"/",
"classpath:/META-INF/resources/",
"classpath:/resources/",
"classpath:/static/",
"classpath:/public/" };
3.假如在瀏覽器輸入localhost:8080/xxx(動態網頁),springboot就會去類路徑下template/xxx.html文件
小編帶著小白看springboot源碼3