Java 中使用 JTE 進行模板編程
1. 引言
Java Template Engine是一個快速、安全、輕量級的範本庫,它在其範本中利用了 Java 和 Kotlin 語法。
在本教程中,我們將快速介紹該程式庫及其主要特性。首先,我們將看一個基本範例,然後我們將探索一些其他特性,例如其IntelliJ 外掛程式、Spring Boot 整合以及提升效能的方法。
2. 設定和 Maven 依賴項
要使用該庫,我們需要 Maven JTE依賴項:
<dependency>
<groupId>gg.jte</groupId>
<artifactId>jte</artifactId>
<version>3.2.2</version>
</dependency>
(可選)我們可以為我們的 IDE 安裝 JTE IntelliJ 插件。
3. 基本範例
讓我們直接來看一個基本範例,了解 JTE 範本的外觀以及如何使用自訂記錄中的資料來渲染它。
3.1 模型類
首先,我們定義一個模型類,它將保存我們用於渲染 JTE 模板的資料:
public record Article(String title, String author, String content, int views) {
}
3.2 範本文件
模板語法力求盡可能接近 Java。我們可以使用@import.此外,我們可以使用任何傳回值為String 、 enum 、基本資料類型或實作了gg.jte.Content介面的類型的 Java 表達式。表達式使用${}語法編寫:
@import com.baeldung.jte.Article
@param Article article
<html>
<body>
<h1>${article.title()}</h1>
<h2>${article.author()}</h2>
<p>${article.content()}</p>
<p>${article.views()}</p>
</body>
</html>
3.3 模板渲染
假設上述範本檔案位於src/main/resources/jte ,我們可以渲染文章檢視:
public String createHtml() {
CodeResolver codeResolver = new DirectoryCodeResolver(Path.of("src/main/resources/jte"));
TemplateOutput output = new StringOutput();
TemplateEngine.create(codeResolver, Html).render(
"article.jte",
new Article("Java Template Engine", "Baeldung", "Helpful article", 42),
output
);
return output.toString();
}
上述方法傳回渲染後的視圖:
<html>
<body>
<h1>Java Template Engine</h1>
<h2>Baeldung</h2>
<p>The Java Template Engine is ...</p>
<p>42</p>
</body>
</html>
4. 其他功能
接下來,讓我們來看看 JTE 與其他範本庫相比有哪些獨特之處。
4.1. 與 Kotlin 的結合使用
JTE 也與 Kotlin 無縫整合。我們可以使用相同的 Maven 依賴項來配合 Kotlin 使用。範本語法會略有不同,以更貼近 Kotlin 的語法,具體說明請參閱官方文件。下一節我們將看一個簡單的範例。
4.2 模板語法
模板語法力求與 Java 和 Kotlin 類似。我們來看一個例子。在 Java 中,模板中的 for-each 迴圈與 Java 程式碼中的 for-each 迴圈非常相似:
@for(String line : article.content().lines().toList())
<p>${line}</p>
@endfor
以下是 Kotlin 中的相同範本:
@for(line in article.content().lines())
<li>${line}</li>
@endfor
此外,我們也可以在${}中加入 Java 或 Kotlin 程式碼。以下是一個 Java 範例:
@import com.baeldung.jte.Article
@param Article article
<html>
<body>
<h1>${article.title()}</h1>
<h2>${article.author()}</h2>
<p>${article.content()}</p>
<p>${article.views() < 100 ? "niche" : "popular"}</p>
</body>
</html>
此範例展示如何使用三元運算子根據article.views()傳回的值來顯示一些文字。
4.3. HTML模板與純文字模板
在我們的範例中,我們使用了ContentType.Html作為範本的內容類型。此選項告訴 JTE 輸出格式為 HTML,並啟用智慧渲染。這確保了輸出能夠正確轉義,並且如果屬性值為false ,則會省略這些屬性。
以下是一個轉義後的 HTML 輸出範例。假設欄title的值為:
<script>alert('inject');</script>
然後,渲染後的模板將包含轉義字串:
<h1>< script > alert('inject'); < /script > </h1>
對於其他任何內容類型,我們可以使用ContentType.Plain 。在這種情況下,不會進行任何轉義。
4.4. IntelliJ 插件
JTE 隨附一個 IntelliJ 插件,可大幅提升開發者的體驗。它提供程式碼補全、重構支援、程式碼導航和語法高亮顯示等功能。
4.5. Spring Boot 集成
JTE 提供了流暢的 Spring Boot 集成,使得在 Spring MVC 中使用 JTE 作為 ViewResolver 變得非常容易。
4.6 性能特點
JTE 的目標是在速度方面超越大多數知名的 Java 函式庫,例如 Thymeleaf 和 FreeMarker。提升效能的兩項特性是預編譯模板和二進位渲染。
5. 結論
本文介紹了 JTE,一個用於 Java 和 Kotlin 的範本庫。 JTE提供了豐富的功能和完整的開發者體驗,包括 IntelliJ 插件和 Spring 整合。和往常一樣,本文中的程式碼已發佈在GitHub上。