方案概述
FreeMarker 教程:模板引擎的快速入门与实践
一、什么是 FreeMarker?
FreeMarker 是一款模板引擎,用于基于模板和动态数据生成输出文本(例如 HTML 网页、电子邮件、配置文件或源代码)。它本质上是一个 Java 类库,主要面向开发者,用于嵌入到开发的产品中。
FreeMarker 的主要功能是将静态模板中的占位符替换为实际数据,从而生成最终的输出。例如:
模板文件 (freemarker.ftl)
<html>
<body>
Hello, ${name}!
</body>
</html>
数据模型
Map<String, Object> model = new HashMap<>();
model.put("name", "World");
生成结果
<html>
<body>
Hello, World!
</body>
</html>
二、环境搭建
创建测试工程 创建一个
freemarker-demo
工程,用于测试 FreeMarker 的功能。可以使用 Spring Boot 快速搭建。Maven 依赖配置 在项目的
pom.xml
文件中引入以下依赖:
<dependencies>
<!-- Spring Boot -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- freemarker starter -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
<!-- Juint -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<!-- Lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<!-- Apache Commons IO -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-io</artifactId>
<version>1.3.2</version>
</dependency>
</dependencies>
配置文件 (application.yml) 设置 FreeMarker 的模板路径和缓存行为:
server:
port: 8881 # 服务端口
spring:
application:
name: freemarker-demo
freemarker:
cache: false # 关闭缓存以便测试
suffix: .ftl # 模板文件后缀名
template-loader-path: classpath:/templates # 模板路径
settings:
template_update_delay: 0 # 模板更新检查延迟时间,设为0表示立即检查
三、快速入门
准备模板文件 在
resources/templates
目录下创建模板文件freemarker.ftl
:
<!DOCTYPE html>
<html>
<head>
<title>FreeMarker Example</title>
</head>
<body>
<b>普通文本展示:</b><br>
Hello ${name}<br>
<hr>
<b>对象 Student 数据展示:</b><br>
姓名:${stu.name}<br>
年龄:${stu.age}<br>
</body>
</html>
Java 代码实现 编写测试类加载模板并生成输出文件:
@Test
public void testFreemarker() throws Exception {
// 初始化 FreeMarker 配置
Configuration configuration = new Configuration(Configuration.VERSION_2_3_31);
configuration.setDirectoryForTemplateLoading(new File("src/main/resources/templates"));
// 加载模板文件
Template template = configuration.getTemplate("freemarker.ftl");
// 准备数据模型
Map<String, Object> dataModel = new HashMap<>();
dataModel.put("name", "FreeMarker");
Student stu = new Student();
stu.setName("张三");
stu.setAge(18);
dataModel.put("stu", stu);
// 合成模板与数据
FileWriter writer = new FileWriter("output.html");
template.process(dataModel, writer);
writer.close();
}
运行结果 生成的
output.html
文件内容如下:
<!DOCTYPE html>
<html>
<head>
<title>FreeMarker Example</title>
</head>
<body>
<b>普通文本展示:</b><br>
Hello FreeMarker<br>
<hr>
<b>对象 Student 数据展示:</b><br>
姓名:张三<br>
年龄:18<br>
</body>
</html>
四、FreeMarker 的常用指令语法
插值表达式 使用
${}
表示变量,FreeMarker 会将其替换为数据模型中的值。Hello ${name}
注释 使用
<#-- ... -->
表示注释,注释内容不会出现在输出结果中。<#-- 这是注释 -->
集合操作 遍历列表和 Map:
<#list students as stu> ${stu.name} - ${stu.age}<br> </#list>
条件判断 使用
<#if>
和<#else>
实现条件逻辑:<#if stu.age > 18> ${stu.name} 是成年人 <#else> ${stu.name} 是未成年人 </#if>
空值处理
判断变量是否存在:
variable??
设置默认值:
${variable!'默认值'}
姓名:${stu.name!'匿名'}
内建函数 使用内置函数对变量进行操作:
集合大小:${students?size}<br> 当前时间:${now?datetime}
五、总结
FreeMarker 是一款功能强大的模板引擎,特别适合在 Java 项目中生成动态内容。通过其简单直观的语法和强大的指令功能,开发者可以快速实现模板渲染,极大提高开发效率。
评论