FreeMarker框架的用法指南
FreeMarker框架的用法指南
一、FreeMarker简介
FreeMarker是一个基于模板生成文本输出的通用工具,使用纯Java编写,能够生成HTML、XML、JSON、RTF、Java源代码等多种格式的文本。它广泛应用于Web开发、邮件生成、报告生成等场景,允许将数据模型与模板文件结合,生成动态的文本输出。
二、FreeMarker的基本概念
- 模板文件(*.ftl)
FreeMarker的模板文件通常以.ftl为后缀,其中包含了用于生成文本的标记和指令。 - 数据模型
数据模型是一个包含要插入模板中数据的对象,通常是一个Map或JavaBean。 - 输出
通过模板和数据模型的结合,FreeMarker生成最终的文本输出。
三、FreeMarker的使用步骤
- 导入FreeMarker库
将FreeMarker的jar包添加到项目中。如果是Maven项目,可以在pom.xml中添加以下依赖:
xml复制
org.freemarker
freemarker
2.3.32
- 创建FreeMarker配置对象
使用Configuration类来创建FreeMarker的配置对象,并设置模板文件的路径、编码格式等。
java复制
Configuration cfg = new Configuration(Configuration.VERSION_2_3_32);
cfg.setDirectoryForTemplateLoading(new File(“src/main/resources/templates”));
cfg.setDefaultEncoding(“UTF-8”); - 获取模板文件
使用Configuration对象的getTemplate方法来获取模板文件的对象。
java复制
Template template = cfg.getTemplate(“hello.ftl”); - 创建数据模型
创建一个数据模型对象,用于存储模板中所需的数据。
java复制
Map<String, Object> model = new HashMap<>();
model.put(“user”, “World”); - 渲染模板
使用模板对象的process方法将数据模型与模板文件进行渲染,并将结果输出到指定的位置。
java复制
StringWriter writer = new StringWriter();
template.process(model, writer);
System.out.println(writer.toString());
四、FreeMarker模板的基本语法
- 变量
用${variable}来引用变量。 - 条件语句
使用<#if>和<#else>进行条件判断。
HTML复制
<#if condition>
…
<#else>
…
</#if> - 循环
使用<#list>进行列表循环。
HTML复制
<#list list as item>
${item}
</#list> - 宏
定义可以重复使用的代码块。
HTML复制
<#macro macroName>
…
</#macro>
五、FreeMarker与Spring Boot集成
在Spring Boot中,可以通过控制器方法将数据传递给FreeMarker模板。以下是一个简单的控制器方法示例:
java复制
@Controller
public class HomeController {
@GetMapping(“/”)
public String home(Model model) {
model.addAttribute(“title”, “Home Page”);
model.addAttribute(“appName”, “My App”);
model.addAttribute(“message”, “Welcome to my application!”);
return “home”;
}
}
同时,需要在Spring Boot的配置文件中添加FreeMarker的配置:
yaml复制
spring:
freemarker:
template-loader-path: classpath:/templates/
suffix: .ftl
content-type: text/html;charset=UTF-8
六、总结
FreeMarker是一个功能强大且灵活的模板引擎,适用于各种Java项目。通过将数据模型与模板文件分离,FreeMarker不仅提高了代码的可维护性,还促进了前后端的分离。无论是在Web开发、邮件生成还是报告生成中,FreeMarker都能提供高效的解决方案。希望本文的介绍能帮助你快速掌握FreeMarker的使用方法,并将其应用到实际项目中。