熊dei們,彆着急,咱們先來談談爲啥開始用Thymeleaf模板引擎,先照顧照顧下咱們這些可愛的小白童鞋....javascript
爲啥開始用Thymeleaf模板引擎?jsp她不香嘛?
首先前端交給咱們的頁面,是html頁面,若是是咱們以前開發,咱們須要把他們轉成jsp頁面,jsp好處就是當咱們查出一些數據轉發到JSP頁面之後,咱們能夠用jsp輕鬆實現數據的顯示,及交互等。jsp支持很是強大的功能,包括能寫Java代碼.......是的先給jsp一頓誇。html
可是呢,SpringBoot項目是以jar的方式,不是war方式,並且SpringBoot用的仍是嵌入式的Tomcat,因此呢,他如今默認是不支持jsp的.......是的而後給jsp反手一嘴巴子。前端
那不支持jsp,若是咱們直接用純靜態頁面的方式,那給咱們開發會帶來很是大的麻煩,那怎麼辦呢,SpringBoot推薦使用模板引擎。模板引擎有不少種,好比Thymeleaf
、Velocity
、FreeMarker
,不過思想都是一致的,這個就沒必要擔憂,springboot推薦使用Thymeleaf
,固然基本上程序員用的都是Thymeleaf模板引擎,在業界Thymeleaf模板引擎是業界的一致好評。java
如今不都先後端分離了麼?Vue她不香嘛?
雖然如今慢慢在流行先後端分離開發,可是仍是有一些「靈玩不靈」
的公司依舊在作先後端不分的開發,而在先後端不分的開發中,咱們就會須要後端頁面模板引擎【實際上,即便先後端分離,也會在一些場景下須要使用頁面模板,舉個典型的栗子:郵件發送模板
】。程序員
隨着科技的發展,社會在進步,企業在奔跑,程序員在咆哮。醒醒吧年輕人,如今都2020年,在以前不免會聽到或者看到網上的文章什麼的說第一步要導入Thymeleaf模板依賴包,說啥在以往的版本中默認是Thymeleaf 是2.1.6x , 開發要基於3.x,而後又要在pom.xml的properties標籤中寫下如下兩句代碼web
<thymeleaf.version>3.0.9.RELEASE</thymeleaf.version> <thymeleaf-layout-dialect.version>2.2.2</thymeleaf-layout-dialect.version>
說是佈局功能的支持程序須要 thymeleaf3主程序、 layout2以上版本,也就是說手動把3.x的thymeleaf覆蓋掉依賴中的2.x。spring
說了一大堆,我只想說一句:如今的版本基本默認都是thymeleaf3.x,如今2020年了,就算是學生仔學習基本都是SpringBoot2.X版本了。若是你還在用SpringBoot1.X,那咱們不合適,你是個好人。編程
若是仍是不肯定,你大可進行以下操做,檢查檢查thymeleaf版本:
後端
得,說(扯)了一大堆,不如來整:
想上面,可能不一樣的idea版本會出現選擇SpringBoot版本不一樣的狀況,這很正常,人生建議:無論啥都不要追求最新版,你用起來好像很牛皮很高端,同時一根菸一行bug改一天的樣子也是很是瀟灑~狼狽~的,這裏我就很少概述了。設計模式
勾選Thymeleaf以後,建立完成後,pom.xml 依賴會默認以下:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
也就是說,以及導入Thymeleaf依賴了,不須要再導了。到這裏基本上能夠說是整合完成了,接下來說講Thymeleaf的強大功能。
Thymeleaf渲染規則,能夠找到它的自動配置文件便可查看它的使用規則,以下:
關鍵代碼:
@ConfigurationProperties(prefix = "spring.thymeleaf") public class ThymeleafProperties { private static final Charset DEFAULT_ENCODING = StandardCharsets.UTF_8; public static final String DEFAULT_PREFIX = "classpath:/templates/"; public static final String DEFAULT_SUFFIX = ".html"; private boolean checkTemplate = true; private boolean checkTemplateLocation = true; private String prefix = DEFAULT_PREFIX; private String suffix = DEFAULT_SUFFIX; private String mode = "HTML"; private Charset encoding = DEFAULT_ENCODING; private boolean cache = true; //...
分析源碼,過程以下:
一、首先經過 @ConfigurationProperties 註解,將 application.properties 前綴爲 spring.thymeleaf 的配置和這個類中的屬性綁定。
二、前三個 static 變量,定義了默認的編碼格式、視圖解析器的前綴、後綴等。
三、根據前三行配置,能夠看出,Thymeleaf 模板的默認位置在 resources/templates 目錄>下,默認的後綴是 html 。
注意:這些配置,若是開發者不本身提供,則使用 默認的,若是本身提供,則在 application.properties 中以 spring.thymeleaf 開始相關的配置。
是的,簡單來講默認規則以下:
默認前綴:
DEFAULT_PREFIX = "classpath:/templates/"
默認後綴:
DEFAULT_SUFFIX = ".html"
徹底相似 Spring MVC 的映射,固然若是要修改這些配置只須要在全局配置文件中覆蓋修改便可,咱們通常不覆蓋,除非特殊需求。
還須要說起一點的是Spring Boot 爲 Thymeleaf 提供的自動化配置類 org.springframework.boot.autoconfigure.thymeleaf.ThymeleafAutoConfiguration
,其中部分關鍵源碼以下:
@Configuration @EnableConfigurationProperties(ThymeleafProperties.class) @ConditionalOnClass({ TemplateMode.class, SpringTemplateEngine.class }) @AutoConfigureAfter({ WebMvcAutoConfiguration.class, WebFluxAutoConfiguration.class }) public class ThymeleafAutoConfiguration { //.... }
分析:
從源碼中能夠看到,這個自動化配置類中,首先
@EnableConfigurationProperties
導入 ThymeleafProperties ,而後@ConditionalOnClass
註解表示當前系統中存在 TemplateMode 和 SpringTemplateEngine 類時,當前的自動化配置類纔會生效,即只要項目中引入了 Thymeleaf 相關的依賴,這個配置就會生效。
這些默認的配置咱們幾乎不須要作任何更改就能夠直接使用了。若是有特殊需求,則能夠在 application.properties
中配置以 spring.thymeleaf
開頭的屬性就能夠本身量身定製了,固然我是不可能有這種需求的,除非有人要打我,不然想不想要想我會有這種需求癖好。若是非要改建議參考SpringBoot官方文檔
是的,以上步驟誰都會,只有測試整合Thymeleaf成功以後纔算是整合完成了,也就是這個階段各類緣由的錯誤就出來了。
首先編寫Controller代碼,咱也不寫的那麼複雜,demo怎麼簡單怎麼來
@Controller public class HelloController { @GetMapping("/su") public String success(){ return "success"; // 至關於訪問 classpath:/templates/success.html } }
編寫頁面代碼,千萬注意這個頁面代碼要在classpath:/templates/
目錄下
代碼以下:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h1>整合Thymeleaf已經success哈哈哈哈</h1> </body> </html>
訪問http://localhost:8080/su
如上效果則說明整合成功。
這種異常很常見具體的還得看異常的信息,好比上面說是頁面路由出現了環,等同於循環引用了,多是本身的訪問路徑名和HTML文件重名了,不妨改個請求路徑試試。
再好比,下面總的來講具體看打印信息
這裏概括一下異常緣由並解決:
一、Application啓動類的位置不對:要將Application類放在最外側,即包含全部子包 ,spring-boot會自動加載啓動類所在包下及其子包下的全部組件。若是啓動類沒有放在最外側就會報錯,正確位置以下:
二、springboot的配置文件有誤:關於application.yml
或application.properties
文件中視圖解析器的配置問題。在pom
文件下的spring-boot-starter-paren
版本較高時使用配置:spring.mvc.view.prefix/spring.mvc.view.suffix
版本較低時使用配置:spring.view.prefix/spring.view.suffix
三、控制器的url訪問路徑與註解@XXXMapping("/xxxx")不匹配,以下圖所示:
四、最後這個緣由就特別坑了喔,你會發現上面你都符合了可是依舊仍是報錯,這就很神奇了,其實我就是這個緣由被坑了一上午————版本過高了 。可能你會說idea默認選擇的時候都是2.1.X往上,基本沒有本身想要的版本,其實這都不是很大的問題,其實能夠在pom.xml中修改便可,以下:
若是這過程還有異常發生,讓你參生恐懼,記住,打敗恐懼的最好辦法就是面對恐懼,醒醒吧年輕人,一giao我哩giaogiao嗷..嗷嗷嗷..嗷嗷嗷嗷..嗷嗷嗷嗷嗷............................奧利給!!!
若是本文對你有一點點幫助,那麼請點個讚唄,謝謝~
最後,如有不足或者不正之處,歡迎指正批評,感激涕零!若是有疑問歡迎留言,絕對第一時間回覆!
歡迎各位關注個人公衆號,裏面有一些java學習資料和一大波java電子書籍,好比說周志明老師的深刻java虛擬機、java編程思想、核心技術卷、大話設計模式、java併發編程實戰.....都是java的聖經,不說了快上Tomcat車,咋們走!最主要的是一塊兒探討技術,嚮往技術,追求技術,說好了來了就是盆友喔...
參考:
SpringBoot官方文檔:https://docs.spring.io/spring-boot/docs/2.0.3.RELEASE/
http://www.imooc.com/article/293021
https://blog.csdn.net/qushaming/article/details/94593675