FreeMarker:Java模板引擎的简介与应用

174 阅读2分钟

FreeMarker是一个Java模板引擎,用于生成文本输出。它基于模板和数据之间的分离原则,通过填充数据到模板中来生成结果。它广泛应用于Web开发中,特别是用于MVC设计模式中的视图层。

用途:

  1. 生成动态内容:FreeMarker可以根据不同的数据源生成动态内容,如生成HTML、XML、JSON等格式的输出。
  2. MVC视图层:在Java Web开发中,FreeMarker常用于将数据渲染到模板中形成视图,然后输出给客户端。

FreeMarker的配置设置: FreeMarker的配置可以通过Configuration类来设置,通过它可以指定模板加载形式、编码方式、缓存设置等。

模板加载方式: FreeMarker支持两种模板加载方式:

  1. 类路径加载:根据指定的类路径加载模板文件,该方法适合于将模板文件打包到应用程序内的场景。
  2. 文件系统路径加载:根据指定的文件系统路径加载模板文件,该方法适合于模板文件存储在服务器文件系统中的场景。

configuration.setClassForTemplateLoading()方法: 该方法用于配置类路径加载模板的路径。参数解释如下:

  • Class:用于获取类路径的类,一般使用当前类的Class对象。
  • String:模板文件所在的根路径。

configuration.setDirectoryForTemplateLoading()方法: 该方法用于配置文件系统路径加载模板的路径。参数解释如下:

  • File:模板文件所在的根目录。

对比和区别两种方式:

  • 类路径加载适合模板文件嵌入到应用程序中的场景,而文件系统路径加载适合模板文件存放在外部的场景。
  • 类路径加载方便部署和维护,但需要重新启动应用程序才能生效;文件系统路径加载方便修改和更新,可以热加载模板文件。
  • 类路径加载可以将多个模板文件打包到一个JAR包中,方便管理和分发。

模板文件的编写语法: FreeMarker模板文件使用特定语法,包括指令、表达式和自定义标签等。 常见语法示例包括条件判断、循环遍历、变量赋值等。 以下是常见的FreeMarker模板文件编写语法示例:

  • 变量赋值:

    <#assign name = "John Doe">
    
  • 输出变量:

    Hello, ${name}!
    
  • 条件判断:

    <#if age &gt;= 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" />
    

模板和数据的渲染过程:

  1. 加载模板:根据配置加载模板文件。
  2. 创建数据模型:准备要渲染的数据。
  3. 渲染:将数据填充到模板中,并生成输出结果。

实际应用场景中,可以使用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();
}