開發一般咱們都會使用模板引擎,好比:JSP、Velocity、Freemarker、Thymeleaf等等不少,那麼模板引擎是幹嗎用的?html
模板引擎,顧名思義,是一款模板,模板中能夠動態的寫入一些參數,咱們將這些參數在代碼中傳入,以保證數據在頁面的動態調用,這就是引擎要作的,頁面和數據的動態傳輸模板。git
SpringBoot官方爲咱們推薦的是Thymeleaf,讓咱們來看看這款引擎哪裏出彩:github
語法相對更簡單,且功能強大;spring
直接在pom中添加便可json
<dependency> <!-- 先後端分離的模板引擎 --> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency>
然而目前來看,官方默認的模板引擎的版本有些舊,咱們須要變動下版本,那麼只須要修改下version就能夠了,能夠去Thymeleaf的官網或者github上看一下最新的版本,引入便可,好比:後端
(不知道怎麼添加的,自學pom.xml去,這裏不作介紹,畢竟是進階的文章)session
<thymeleaf.version>3.0.9.RELEASE</thymeleaf.version> <!-- 佈局功能的支持程序,若thymeleaf 3主程序 , layout須要2以上版本 --> <thymeleaf-layout-dialect.version>2.3.0</thymeleaf-layout-dialect.version>
首先咱們須要關注下,SpringBoot若想使用模板引擎,那麼須要將html文件放入在指定的文件夾才能被識別,SpringBoot這裏默認識別的動態資源文件夾是app
"classpath:/templates/"
因此咱們須要將html頁放到這個文件夾中才能別自動識別和渲染。前後端分離
Thymeleaf的語法說簡單,是由於它徹底能夠按照html的方式來編寫,舉例 「success.html」spring-boot
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h1>成功</h1> </body> </html>
而後咱們來寫一個controller,訪問下這個頁面看看是否OK:(以前咱們學習了在@Controller的類內加入@ResponseBody能夠訪問json資源,這裏不加的話,就是訪問頁面了)
@Controller public class SuccessController { @GetMapping("/success") public String sucTest(){ return "success"; } }
來看訪問結果:
很好,完成了咱們的第一步實踐。
推薦:下載官方文檔,教你怎麼用thymeleaf,如圖:(官方連接地址)
@Controller public class SuccessController { @GetMapping("/success") public String sucTest(Map<String,Object> map){ map.put("hello","你好"); return "success"; } }
1.首先在html中加入 xmlns:th="http://www.thymeleaf.org" ,這個能夠幫助咱們引導使用thymeleaf。
2.而後使用thymeleaf語法,在須要引值的地方添加th:text,這裏表示須要引入文本,使用${xx},就是咱們代碼中寫的值,這裏填的是hello,頁面中應當返回的就是「你好」
<!DOCTYPE html> <html lang="en" xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h1>成功</h1> <div th:text="${hello}">這是沒有引擎展現的數據</div>
</body>
</html>
最後,咱們來看是否展現成功:
很好,沒有問題,hello的值是「你好」,成功展現。
另外,咱們看到,在html中的div中,咱們還有一段文字,沒有展現,這個文字是在沒有引入引擎的時候展現的,也就是先後端分離的做用了
以上就是一些簡單的使用,接下來,咱們看下其餘實現,也就是Thymeleaf的語法還有些什麼。
好比:(能夠看到,原生的屬性,都替換成了hello的值)
<div id="abc" class="aaa" th:id="${hello}" th:class="${hello}" th:text="${hello}">這是沒有引擎展現的數據</div>
th:id="${session.abc} 或者 th:id="${string.tostring()}"
<div th:object="${odin.user}" th:text="${hello}">這是沒有引擎展現的數據</div> <a th:id="*{name}"></a> <a th:id="*{sex}"></a> </div>
這裏 * 就表示上邊object定義的變量odin.user。其下邊的*{name} 等同於 ${odin.user.name}
另外,還能夠拼接咱們須要的url,如圖:
還有不少後邊會用到的表達式,
好比,字面量、文本操做(字符串拼接)、數學/布爾/比較/條件運算、特殊操做,參考文檔來學習吧!