Java FreeMarker模板引擎深度解析:从入门到精通

一、FreeMarker简介
FreeMarker是一款广泛使用的Java模板引擎,它允许开发者使用模板来生成动态内容。FreeMarker可以用于生成HTML、XML、Java代码等多种格式的内容。在Java开发中,FreeMarker常用于生成Web页面、生成数据库脚本、生成邮件等内容。
二、FreeMarker的工作原理
FreeMarker的工作原理非常简单,它将模板分为两部分:模板文本和变量。模板文本中包含静态内容和动态内容,动态内容用特定的语法表示。当FreeMarker执行时,它会将模板文本中的变量替换为相应的值,从而生成最终的输出内容。
三、FreeMarker的入门使用
1. 引入依赖
在Java项目中,首先需要引入FreeMarker的依赖。以Maven为例,在pom.xml文件中添加以下依赖:
```xml
```
2. 创建模板
创建一个名为`template.ftl`的FreeMarker模板文件,内容如下:
```html
${content}
```
3. 编写Java代码
在Java代码中,创建一个`FreeMarkerTemplateModel`对象,并设置模板文件路径和变量:
```java
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
public class FreeMarkerDemo {
public static void main(String[] args) {
try {
// 创建FreeMarker配置对象
Configuration configuration = new Configuration();
// 设置模板文件所在目录
configuration.setDirectoryForTemplateLoading(new File("src/main/resources"), "");
// 加载模板文件
Template template = configuration.getTemplate("template.ftl");
// 创建数据模型
Map
dataModel.put("title", "FreeMarker示例");
dataModel.put("content", "欢迎使用FreeMarker");
// 创建输出文件
File outputFile = new File("output.html");
FileWriter writer = new FileWriter(outputFile);
// 输出内容
template.process(dataModel, writer);
writer.close();
System.out.println("输出文件已生成:" + outputFile.getAbsolutePath());
} catch (IOException | TemplateException e) {
e.printStackTrace();
}
}
}
```
4. 运行程序
运行程序后,会在项目目录下生成一个名为`output.html`的文件,内容如下:
```html
欢迎使用FreeMarker
```
四、FreeMarker的高级使用
1. 自定义函数
FreeMarker允许自定义函数,方便在模板中调用。在Java代码中,创建一个`TemplateMethodModelEx`对象,并实现`exec`方法:
```java
import freemarker.template.TemplateMethodModelEx;
import freemarker.template.TemplateModelException;
import java.util.List;
public class MyFunction extends TemplateMethodModelEx {
@Override
public Object exec(List arguments) throws TemplateModelException {
// 获取传入的参数
String input = (String) arguments.get(0);
// 处理参数
String output = input.toUpperCase();
return output;
}
}
```
在模板文件中,使用`<#function>`标签定义函数:
```html
<#function toUpperCase input>
${input.toUpperCase()}
#function>
```
在模板中使用自定义函数:
```html
<#function toUpperCase input>
${input.toUpperCase()}
#function>
${toUpperCase("欢迎使用FreeMarker")}
```
2. 国际化
FreeMarker支持国际化,可以通过设置`locale`属性来实现。在Java代码中,创建一个`Locale`对象,并设置模板文件的locale:
```java
Configuration configuration = new Configuration();
configuration.setDirectoryForTemplateLoading(new File("src/main/resources"), "");
configuration.setLocale(Locale.US);
```
在模板文件中,使用`<#local>`标签设置局部变量的locale:
```html
<#local locale = "zh_CN">
<#if locale == "zh_CN">
欢迎使用FreeMarker
<#else>
Welcome to FreeMarker
#if>
#local>
```
五、总结
FreeMarker是一款功能强大的Java模板引擎,它可以帮助开发者快速生成动态内容。本文从入门到精通,详细介绍了FreeMarker的安装、使用和高级功能。通过学习本文,相信读者可以掌握FreeMarker的基本用法,并将其应用到实际项目中。






