FreeMarker 简介

FreeMarker 是一个基于 Java 的模板引擎,主要用于生成文本输出(如 HTML、XML、JSON 等)。它通过将数据模型和模板分离,使得开发者能够轻松地将动态内容嵌入到静态文本中。FreeMarker 广泛用于 web 开发中,尤其是在 MVC(模型-视图-控制器)架构中。

为什么使用 FreeMarker?

  1. 分离关注点:将业务逻辑与表现层分离,简化了代码的维护和扩展。
  2. 灵活性:可以生成多种格式的输出,不仅限于 HTML。
  3. 易用性:提供了丰富的模板语法,方便开发者操作数据。

FreeMarker 的基本使用

1. 环境准备

首先,你需要在项目中引入 FreeMarker。可以通过 Maven 进行依赖管理:

1
2
3
4
5
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.31</version>
</dependency>

2. 创建模板

FreeMarker 的模板文件一般使用 .ftl 后缀。创建一个简单的模板文件 hello.ftl

1
2
3
4
5
6
7
8
9
10
<!DOCTYPE html>
<html>
<head>
<title>Hello, ${user}!</title>
</head>
<body>
<h1>Hello, ${user}!</h1>
<p>Welcome to FreeMarker!</p>
</body>
</html>

在这个模板中,${user} 是一个占位符,表示将来会被具体的值替代。

3. 编写 Java 代码

接下来,编写 Java 代码来加载模板并填充数据模型:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;

import java.io.IOException;
import java.io.StringWriter;
import java.util.HashMap;
import java.util.Map;

public class FreeMarkerExample {
public static void main(String[] args) {
// 创建 FreeMarker 配置实例
Configuration cfg = new Configuration(Configuration.VERSION_2_3_31);
cfg.setClassForTemplateLoading(FreeMarkerExample.class, "/");

// 创建数据模型
Map<String, Object> model = new HashMap<>();
model.put("user", "World");

try {
// 加载模板
Template template = cfg.getTemplate("hello.ftl");

// 合并模板与数据模型
StringWriter writer = new StringWriter();
template.process(model, writer);

// 输出结果
System.out.println(writer.toString());
} catch (IOException | TemplateException e) {
e.printStackTrace();
}
}
}

4. 运行结果

运行上述代码,输出结果如下:

1
2
3
4
5
6
7
8
9
10
<!DOCTYPE html>
<html>
<head>
<title>Hello, World!</title>
</head>
<body>
<h1>Hello, World!</h1>
<p>Welcome to FreeMarker!</p>
</body>
</html>

5. FreeMarker 的语法

  • 变量:用 ${variable} 来引用变量。
  • 条件语句:使用 <#if><#else> 进行条件判断。
  • 循环:使用 <#list> 进行列表循环。
  • :定义可以重复使用的代码块。

示例:使用条件和循环

1
2
3
4
5
6
7
8
9
10
11
<#if user?exists>
<h1>Hello, ${user}!</h1>
<#else>
<h1>Hello, Guest!</h1>
</#if>

<ul>
<#list items as item>
<li>${item}</li>
</#list>
</ul>

总结

FreeMarker 是一个强大的模板引擎,能够帮助你轻松地将数据渲染到文本中。通过简单的配置和语法,可以创建动态的 web 页面,极大地提高开发效率。