FreeMarker 简介
FreeMarker 是一个基于 Java 的模板引擎,主要用于生成文本输出(如 HTML、XML、JSON 等)。它通过将数据模型和模板分离,使得开发者能够轻松地将动态内容嵌入到静态文本中。FreeMarker 广泛用于 web 开发中,尤其是在 MVC(模型-视图-控制器)架构中。
为什么使用 FreeMarker?
- 分离关注点:将业务逻辑与表现层分离,简化了代码的维护和扩展。
- 灵活性:可以生成多种格式的输出,不仅限于 HTML。
- 易用性:提供了丰富的模板语法,方便开发者操作数据。
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) { 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 页面,极大地提高开发效率。