閱讀本文約需要5分鐘
大家好,我是你們的導師,我每天都會在這裡給大家分享一些幹貨内容(當然了,周末也要允許老師休息一下哈)。上次老師跟大家分享了Spring Boot 中對MVC的支援,今天跟大家分享下Spring Boot 內建 Thymeleaf 模闆引擎。
1. Thymeleaf 介紹
Thymeleaf 是适用于 Web 和獨立環境的現代伺服器端 Java 模闆引擎。Thymeleaf 的主要目标是為您的開發工作流程帶來優雅的自然模闆 —— 可以在浏覽器中正确顯示 HTML,也可以用作靜态原型,進而在開發團隊中實作更強大的協作。
以上出自 Thymeleaf 官方網站。傳統的 JSP+JSTL 組合已經過去了,Thymeleaf 是現代服務端的模闆引擎,與傳統的 JSP 不同,Thymeleaf 可以使用浏覽器直接打開,因為它可以忽略掉拓展屬性,相當于打開原生頁面,給前端人員也帶來了一定的便利。
什麼意思呢?就是說在本地環境或者有網絡的環境下,Thymeleaf 均可運作。由于 Thymeleaf 支援 HTML 型,也支援在 HTML 标簽裡增加額外的屬性來達到“模闆+資料” 的展示方式,是以美工可以直接在浏覽器中檢視頁面效果,當服務啟動後,也可以讓背景開發人員檢視帶資料的動态頁面效果。比如下面代碼:
類似于上面這樣,在靜态頁面時,會展示靜态資訊,當服務啟動後,動态擷取資料庫中的資料後,就可以展示動态資料,th:text 标簽是用來動态替換文本的,将會在下文說明。該例子說明浏覽器解釋 HTML 時會忽略 HTML 中未定義的标簽屬性(比如 th:text),是以 Thymeleaf 的模闆可以靜态地運作;當有資料傳回到頁面時,Thymeleaf 标簽會動态地替換掉靜态内容,使頁面動态顯示資料。
2. 依賴導入
在 Spring Boot 中使用 Thymeleaf 模闆需要引入依賴,可以在建立項目工程時勾選 Thymeleaf,也可以建立之後再手動導入,如下代碼:
另外,在 HTML 頁面上如果要使用 Thymeleaf 模闆,需要在頁面标簽中引入如下代碼:
3. Thymeleaf 相關配置
因為 Thymeleaf 中已經有預設的配置了,我們不需要再對其做過多的配置,有一點需要注意下,Thymeleaf 預設是開啟頁面緩存的,是以在開發的時候,需要關閉這個頁面緩存,配置如下:
否則會有緩存,導緻頁面沒法及時看到更新後的效果。比如你修改了一個檔案,已經 Update 到 Tomcat 了,但重新整理頁面還是之前的頁面,就是因為緩存引起的。
4. Thymeleaf 的使用
1)通路靜态頁面
這個和 Thymeleaf 沒啥關系,應該說是通用的。我把它一并寫到這裡,是因為一般我們做網站的時候,都會做一個 404 頁面和 500 頁面,為了出錯時給使用者一個友好的展示,而不至于一堆異常資訊抛出來。Spring Boot 會自動識别模闆目錄( templates/)下的 404.html 和 500.html 檔案。我們在 templates/ 目錄下建立一個 error 檔案夾,專門放置錯誤的 HTML 頁面,然後分别列印些資訊。以 404.html 為例,代碼如下:
我們再寫一個 controller 來測試一下 404 和 500 頁面:
當我們在浏覽器中輸入:localhost:8080/thymeleaf/test400 時,故意輸入錯誤,找不到對應的方法,就會跳轉到 404.html 顯示。
當我們在浏覽器中輸入:localhost:8088/thymeleaf/test505 時,會抛出異常,然後會自動跳轉到 500.html 顯示。
每個站長在開發自己的網站時,都需要開發 404 和 500 頁面,有些站長會在 404 頁面導入一些公益的資訊,比如丢失的孩子資訊,其實也挺好的,都是在做好事,我很支援這麼做,我也看到很多類似的 404 頁面,非常棒。
2)Thymeleaf 中處理對象
我們來看一下 Thymeleaf 模闆中如何處理對象資訊,假如我們在做個人部落格的時候,需要給前端傳部落客相關資訊來展示,那麼我們會封裝一個部落客對象,比如下面代碼:
然後在 controller 層中初始化:
我們先初始化一個 Blogger 對象,然後将該對象放到 Model 中,再傳回到 blogger.html 頁面去渲染。接下來我們再寫一個 blogger.html 來渲染 blogger 資訊:
可以看出,在 Thymeleaf 模闆中,使用 th:object="${}" 來擷取對象資訊,然後在表單裡面可以有三種方式來擷取對象屬性。如下:
3)Thymeleaf 中處理 List
處理 List 的話,和處理上面介紹的對象差不多,但是需要在 Thymeleaf 中進行周遊。我們先在 Controller 中模拟一個 List。
接下來我們寫一個 list.html 來擷取該 List 資訊,然後在 list.html 中周遊這個 List。如下代碼:
可以看出,其實和處理單個對象資訊差不多,Thymeleaf 使用 th:each 進行周遊,${} 取 Model 中傳過來的參數,然後自定義 List 中取出來的每個對象,這裡定義為 blogger。表單裡面可以直接使用 ${對象.屬性名} 來擷取 List 中對象的屬性值,也可以使用 ${對象.get方法} 來擷取,這點和上面處理對象資訊是一樣的,但是不能使用 *{屬性名} 來擷取對象中的屬性,Thymeleaf 模闆擷取不到。
今天就分享到這,今日留言話題:Springboot中內建Thymeleaf你學會了嗎?對有價值的留言,我們都會一一回複的。如果覺得對你有一丢丢幫助,請點右下角【在看】,讓更多人看到該文章。
【我們直招】很苦逼,但工資超級高!