前言
在之前的文章Spring Boot 整合 Thymeleaf中,我們學習瞭如何將模板 Thymeleaf 整合到 Spring Boot 中,那今天我們就來看看,另一個老牌的開源免費模板引擎 - FreeMarker!
FreeMarker 簡介
FreeMarker 是一款模板引擎:即一種基於模板和要改變的資料,並用來生成輸出文字(HTML網頁,電子郵件,配置檔案,原始碼等)的通用工具。 它不是面向終端使用者的,而是一個Java類庫,是一款程式設計師可以嵌入他們所開發產品的元件。
以上就是出自 FreeMarker 的官方定義,我們通過使用 FreeMarker,可以將我們所需的模板何資料渲染成 HTML,從而實現我們想要的效果。通過將模板與資料分開,讓分工更加明確,模板方面則專注於如何將資料進行展現,而在資料方面,我們就可以專注於展示何種資料,下圖就是我們以上所描述的 FreeMarker 的功能。
那接下來,我們就來看看,如何將 FreeMarker 像 Thymeleaf 一樣整合到我們的 Spring Boot 中,讓我們的開發更加簡單。
準備工作
環境準備
正式開始之前,依然給出本文所基於的環境,避免環境問題可能給大家帶來的影響。
- JDK 17(理論上推薦不低於 1.8 版本)
- IDEA
- SpringBoot 2.x
新增 FreeMarker 依賴
開始之前,我們需要新增 FreeMarker 的相關依賴,同樣這裡我們可以選擇兩種方式。一種是在建立專案時就新增上,另一種則是建立專案後在專案 pom.xml
檔案中手動新增,接下來我們分別來看看兩種不同的方式應該如何新增。如果還不清楚如何建立 Spring Boot 專案,可以參照我之前的一篇文章:建立 Spring Boot 專案的 3 種方式。
- 第一種
在使用 IDEA 建立 Spring Boot 新專案時,新增依賴時將模板引擎中的 Apache FreeMarker
勾選上。
2.第二種
如果在建立時未新增 FreeMarker 模板引擎依賴,或者在專案開始建立之初並未有此需求,但後續過程中又增加了該需求,則此時可以直接在專案 pom.xml
中手動新增 FreeMarker 依賴即可。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
新增 FreeMarker 相關配置
新增依賴後,我們需要在專案配置檔案 application.yml
中新增 FreeMarker 的相關配置。
spring:
freemarker:
# 模板字尾名
suffix: .ftl
# 文件型別
content-type: text/html
# 頁面編碼
charset: UTF-8
# 頁面快取
cache: false
# 模板路徑
template-loader-path: classpath:/templates/
編寫實體類和 Controller
編寫實體類
建立一個 User
類,並將其各種 setter
、getter
、構造方法等完成,這裡我依然使用了 Lombok 外掛,以便簡化我們的程式碼。關於該外掛的更多用法,可以參照我之前的文章:Lombok 的安裝及使用指南。
package com.cunyu.springbootfreemarkerdemo.entity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.stereotype.Component;
/**
* Created with IntelliJ IDEA.
*
* @author : zhangliang
* @version : 1.0
* @project : java-learning
* @package : com.cunyu.springbootfreemarkerdemo.entity
* @className : User
* @createTime : 2021/11/30 21:55
* @email : 747731461@qq.com
* @公眾號 : 村雨遙
* @website : https://cunyu1943.github.io
* @description :
*/
@Component
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
private int age;
private String name;
private String email;
}
編寫 Controller
這裡我們建立一個 User
物件,然後設定其年齡、Email、姓名等相關資訊,然後將其加到屬性中,方便傳輸到前端進行展示。
package com.cunyu.springbootfreemarkerdemo.controller;
import com.cunyu.springbootfreemarkerdemo.entity.User;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
/**
* Created with IntelliJ IDEA.
*
* @author : zhangliang
* @version : 1.0
* @project : java-learning
* @package : com.cunyu.springbootfreemarkerdemo.controller
* @className : UserController
* @createTime : 2021/11/30 22:04
* @email : 747731461@qq.com
* @公眾號 : 村雨遙
* @website : https://cunyu1943.github.io
* @description :
*/
@Controller
public class UserController {
@GetMapping("/index")
public String index(Model model) {
User user = new User();
user.setAge(26);
user.setEmail("747731461@qq.com");
user.setName("村雨遙");
model.addAttribute("user", user);
return "index";
}
}
資料渲染
當完成實體類和 Controller 編寫後,我們就可以利用模板來進行展示了。我們在專案的 resources/templates
路進行新建一個 index.ftl
檔案,注意這裡檔名要保持和 Controller 中 index
方法所返回的字串一致。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>FreeMarker 實驗</title>
</head>
<body>
<table>
<tr>
<td>姓名</td>
<td>年齡</td>
<td>Email</td>
</tr>
<tr>
<td>${user.name}</td>
<td>${user.age}</td>
<td>${user.email}</td>
</tr>
</table>
</body>
</html>
測試
將我們的專案啟動起來,然後在瀏覽器中訪問如下路徑:
http://localhost:8080/index
如果顯示如下圖中的資訊,那麼就說明我們此次的整合工作順利完成!
總結
以上就是 Spring Boot 整合 FreeMarker 的具體過程了,可以結合之前的文章:Spring Boot 整合 Thymeleaf 例項共同閱讀,對比 Thymeleaf 和 FreeMarker 在整合過程中的一些共同點和不同點,相信你會有更多的收穫。
最後,關於本文案例程式碼,我已經上傳到 Github,有需要的小夥伴可以自取:傳送門。