Spring?Boot?整合?FreeMarker?實(shí)例分享
一、前言
在之前的文章Spring Boot 整合 Thymeleaf 實(shí)例分享中,我們學(xué)習(xí)了如何將模板 Thymeleaf 整合到 Spring Boot 中,那今天我們就來(lái)看看,另一個(gè)老牌的開(kāi)源免費(fèi)模板引擎 - FreeMarker!
二、FreeMarker 簡(jiǎn)介
FreeMarker 是一款模板引擎:即一種基于模板和要改變的數(shù)據(jù),并用來(lái)生成輸出文本(HTML網(wǎng)頁(yè),電子郵件,配置文件,源代碼等)的通用工具。 它不是面向最終用戶(hù)的,而是一個(gè)Java類(lèi)庫(kù),是一款程序員可以嵌入他們所開(kāi)發(fā)產(chǎn)品的組件。
以上就是出自 FreeMarker 的官方定義,我們通過(guò)使用 FreeMarker,可以將我們所需的模板何數(shù)據(jù)渲染成 HTML,從而實(shí)現(xiàn)我們想要的效果。通過(guò)將模板與數(shù)據(jù)分開(kāi),讓分工更加明確,模板方面則專(zhuān)注于如何將數(shù)據(jù)進(jìn)行展現(xiàn),而在數(shù)據(jù)方面,我們就可以專(zhuān)注于展示何種數(shù)據(jù),下圖就是我們以上所描述的 FreeMarker 的功能。

那接下來(lái),我們就來(lái)看看,如何將 FreeMarker 像 Thymeleaf 一樣整合到我們的 Spring Boot 中,讓我們的開(kāi)發(fā)更加簡(jiǎn)單。
三、準(zhǔn)備工作
環(huán)境準(zhǔn)備
正式開(kāi)始之前,依然給出本文所基于的環(huán)境,避免環(huán)境問(wèn)題可能給大家?guī)?lái)的影響。
- JDK 17(理論上推薦不低于 1.8 版本)
- IDEA
- SpringBoot 2.x
添加 FreeMarker 依賴(lài)
開(kāi)始之前,我們需要添加 FreeMarker 的相關(guān)依賴(lài),同樣這里我們可以選擇兩種方式。一種是在創(chuàng)建項(xiàng)目時(shí)就添加上,另一種則是創(chuàng)建項(xiàng)目后在項(xiàng)目 pom.xml 文件中手動(dòng)添加,接下來(lái)我們分別來(lái)看看兩種不同的方式應(yīng)該如何添加。如果還不清楚如何創(chuàng)建 Spring Boot 項(xiàng)目,可以參照我之前的一篇文章:Spring Boot 教程之創(chuàng)建項(xiàng)目的三種方式
- 第一種
在使用 IDEA 創(chuàng)建 Spring Boot 新項(xiàng)目時(shí),添加依賴(lài)時(shí)將模板引擎中的 Apache FreeMarker 勾選上。

2.第二種
如果在創(chuàng)建時(shí)未添加 FreeMarker 模板引擎依賴(lài),或者在項(xiàng)目開(kāi)始創(chuàng)建之初并未有此需求,但后續(xù)過(guò)程中又增加了該需求,則此時(shí)可以直接在項(xiàng)目 pom.xml 中手動(dòng)添加 FreeMarker 依賴(lài)即可。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>添加 FreeMarker 相關(guān)配置
添加依賴(lài)后,我們需要在項(xiàng)目配置文件 application.yml 中添加 FreeMarker 的相關(guān)配置。
spring:
freemarker:
# 模板后綴名
suffix: .ftl
# 文檔類(lèi)型
content-type: text/html
# 頁(yè)面編碼
charset: UTF-8
# 頁(yè)面緩存
cache: false
# 模板路徑
template-loader-path: classpath:/templates/四、編寫(xiě)實(shí)體類(lèi)和 Controller
編寫(xiě)實(shí)體類(lèi)
創(chuàng)建一個(gè) User 類(lèi),并將其各種 setter、getter、構(gòu)造方法等完成,這里我依然使用了 Lombok 插件,以便簡(jiǎn)化我們的代碼。關(guān)于該插件的更多用法,可以參照我之前的文章:Lombok 安裝和使用小技巧
package com.cunyu.springbootfreemarkerdemo.entity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.stereotype.Component;
@Component
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
private int age;
private String name;
private String email;
}編寫(xiě) Controller
這里我們創(chuàng)建一個(gè) User 對(duì)象,然后設(shè)置其年齡、Email、姓名等相關(guān)信息,然后將其加到屬性中,方便傳輸?shù)角岸诉M(jìn)行展示。
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;
@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";
}
}數(shù)據(jù)渲染
當(dāng)完成實(shí)體類(lèi)和 Controller 編寫(xiě)后,我們就可以利用模板來(lái)進(jìn)行展示了。我們?cè)陧?xiàng)目的 resources/templates 路進(jìn)行新建一個(gè) index.ftl 文件,注意這里文件名要保持和 Controller 中 index 方法所返回的字符串一致。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>FreeMarker 實(shí)驗(yàn)</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>五、總結(jié)
我們可以結(jié)合之前的文章:Spring Boot 整合 Thymeleaf 實(shí)例分享共同閱讀,對(duì)比 Thymeleaf 和 FreeMarker 在整合過(guò)程中的一些共同點(diǎn)和不同點(diǎn),相信你會(huì)有更多的收獲。
到此這篇關(guān)于Spring Boot 整合 FreeMarker 實(shí)例分享的文章就介紹到這了,更多相關(guān)Spring Boot 整合 FreeMarker 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Nebula?Graph介紹和SpringBoot環(huán)境連接和查詢(xún)操作
Nebula?Graph?是一款開(kāi)源的、分布式的、易擴(kuò)展的原生圖數(shù)據(jù)庫(kù),能夠承載包含數(shù)千億個(gè)點(diǎn)和數(shù)萬(wàn)億條邊的超大規(guī)模數(shù)據(jù)集,并且提供毫秒級(jí)查詢(xún),這篇文章主要介紹了Nebula?Graph介紹和SpringBoot環(huán)境連接和查詢(xún),需要的朋友可以參考下2022-10-10
Java數(shù)據(jù)結(jié)構(gòu)二叉樹(shù)難點(diǎn)解析
樹(shù)是一種重要的非線性數(shù)據(jù)結(jié)構(gòu),直觀地看,它是數(shù)據(jù)元素(在樹(shù)中稱(chēng)為結(jié)點(diǎn))按分支關(guān)系組織起來(lái)的結(jié)構(gòu),很象自然界中的樹(shù)那樣。樹(shù)結(jié)構(gòu)在客觀世界中廣泛存在,如人類(lèi)社會(huì)的族譜和各種社會(huì)組織機(jī)構(gòu)都可用樹(shù)形象表示2021-10-10
SpringBoot整合微信登錄功能的實(shí)現(xiàn)方案
今天通過(guò)本文給大家分享微信登錄與SpringBoot整合過(guò)程,微信掃描登錄實(shí)現(xiàn)代碼知道掃描后點(diǎn)擊登錄的全部過(guò)程,本文給大家介紹的非常詳細(xì),需要的朋友可以參考下2021-10-10
可能是全網(wǎng)最詳細(xì)的springboot整合minio教程
MinIO是全球領(lǐng)先的對(duì)象存儲(chǔ)先鋒,在標(biāo)準(zhǔn)硬件上,讀/寫(xiě)速度上高達(dá)183 GB/秒和171 GB/秒,下面這篇文章主要給大家介紹了關(guān)于springboot整合minio的相關(guān)資料,這個(gè)教程可能是全網(wǎng)最詳細(xì)的,需要的朋友可以參考下2022-06-06
Spring Profile與PropertyPlaceholderConfigurer項(xiàng)目多環(huán)境配置切換
這篇文章主要介紹了Spring Profile與PropertyPlaceholderConfigurer項(xiàng)目多環(huán)境配置切換方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-09-09
基于FlashPaper實(shí)現(xiàn)JSP在線閱讀代碼示例
這篇文章主要介紹了基于FlashPaper實(shí)現(xiàn)JSP在線閱讀代碼示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-10-10

