FreeMarker是一个Java模板引擎,用于生成文本输出。它基于模板和数据之间的分离原则,通过填充数据到模板中来生成结果。它广泛应用于Web开发中,特别是用于MVC设计模式中的视图层。
用途:
- 生成动态内容:FreeMarker可以根据不同的数据源生成动态内容,如生成HTML、XML、JSON等格式的输出。
- MVC视图层:在Java Web开发中,FreeMarker常用于将数据渲染到模板中形成视图,然后输出给客户端。
FreeMarker的配置设置: FreeMarker的配置可以通过Configuration类来设置,通过它可以指定模板加载形式、编码方式、缓存设置等。
模板加载方式: FreeMarker支持两种模板加载方式:
- 类路径加载:根据指定的类路径加载模板文件,该方法适合于将模板文件打包到应用程序内的场景。
- 文件系统路径加载:根据指定的文件系统路径加载模板文件,该方法适合于模板文件存储在服务器文件系统中的场景。
configuration.setClassForTemplateLoading()方法: 该方法用于配置类路径加载模板的路径。参数解释如下:
- Class:用于获取类路径的类,一般使用当前类的Class对象。
- String:模板文件所在的根路径。
configuration.setDirectoryForTemplateLoading()方法: 该方法用于配置文件系统路径加载模板的路径。参数解释如下:
- File:模板文件所在的根目录。
对比和区别两种方式:
- 类路径加载适合模板文件嵌入到应用程序中的场景,而文件系统路径加载适合模板文件存放在外部的场景。
- 类路径加载方便部署和维护,但需要重新启动应用程序才能生效;文件系统路径加载方便修改和更新,可以热加载模板文件。
- 类路径加载可以将多个模板文件打包到一个JAR包中,方便管理和分发。
模板文件的编写语法: FreeMarker模板文件使用特定语法,包括指令、表达式和自定义标签等。 常见语法示例包括条件判断、循环遍历、变量赋值等。 以下是常见的FreeMarker模板文件编写语法示例:
-
变量赋值:
<#assign name = "John Doe"> -
输出变量:
Hello, ${name}! -
条件判断:
<#if age >= 18> You are an adult. <#else> You are a minor. </#if> -
循环遍历:
<#list names as name> ${name} </#list> -
包含其他模板文件:
<#include "header.ftl"> -
调用自定义标签:
<@customTag param1="value1" param2="value2" />
模板和数据的渲染过程:
- 加载模板:根据配置加载模板文件。
- 创建数据模型:准备要渲染的数据。
- 渲染:将数据填充到模板中,并生成输出结果。
实际应用场景中,可以使用FreeMarker生成HTML邮件、动态网页、报表等。
Configuration configuration = new Configuration(Configuration.VERSION_2_3_31);
configuration.setClassForTemplateLoading(Main.class, "/templates");
Template template = configuration.getTemplate("template.ftl");
Map<String, Object> dataModel = new HashMap<>();
dataModel.put("name", "John Doe");
StringWriter writer = new StringWriter();
try {
template.process(dataModel, writer);
String output = writer.toString();
System.out.println(output);
} catch (TemplateException | IOException e) {
e.printStackTrace();
}