Java Freemarker 模板

Freemarker 是一款用于生成动态模板的 Java 模板引擎。它使用简单且功能强大,广泛应用于 Java Web 开发中。本文将介绍 Freemarker 的基本概念、使用方法和示例代码。

Freemarker 概述

Freemarker 是一种基于模板的生成技术,它通过在模板中插入变量和逻辑控制语句,动态生成最终的文本输出。

Freemarker 的模板使用一种类似于 HTML 的语法,其中包含了占位符、条件判断、循环等功能。通过将模板和数据进行结合,可以生成各种动态内容,如网页、邮件、报表等。

安装和配置

要使用 Freemarker,首先需要将 Freemarker 的 JAR 文件添加到 Java 项目的依赖中。可通过 Maven 或手动下载 JAR 文件的方式添加依赖。

<dependency>
    <groupId>org.freemarker</groupId>
    <artifactId>freemarker</artifactId>
    <version>2.3.31</version>
</dependency>

在项目中引入 Freemarker 后,需要进行简单的配置,告诉 Freemarker 模板的位置和一些其他属性。可以使用 Configuration 类进行配置。

Configuration configuration = new Configuration(Configuration.VERSION_2_3_31);
configuration.setDirectoryForTemplateLoading(new File("templates"));
configuration.setDefaultEncoding("UTF-8");

以上代码指定了模板文件的位置为 "templates" 文件夹,并设置默认编码为 UTF-8。

模板语法

Freemarker 的模板语法包括以下几个关键元素:

  • 变量输出:通过 ${} 语法可以在模板中输出变量的值。
Welcome, ${name}!
  • 条件判断:使用 <#if><#else> 可以进行条件判断。
<#if age &gt;= 18>
    <p>You are an adult.</p>
<#else>
    <p>You are a minor.</p>
</#if>
  • 循环:使用 <#list> 可以进行循环操作。
<ul>
<#list items as item>
    <li>${item}</li>
</#list>
</ul>
  • 宏定义:可以使用 <#macro> 定义宏,在模板中进行复用。
<#macro welcomeMessage name>
    Welcome, ${name}!
</#macro>

<@welcomeMessage name="John" />

更多模板语法的详细使用方法可以参考 Freemarker 的官方文档。

使用示例

下面是一个简单的示例,演示了如何使用 Freemarker 生成一个 HTML 页面。

public class FreemarkerExample {
    public static void main(String[] args) throws Exception {
        Configuration configuration = new Configuration(Configuration.VERSION_2_3_31);
        configuration.setDirectoryForTemplateLoading(new File("templates"));
        configuration.setDefaultEncoding("UTF-8");

        Template template = configuration.getTemplate("example.ftl");

        Map<String, Object> data = new HashMap<>();
        data.put("title", "Hello, Freemarker!");
        data.put("name", "John");
        data.put("age", 25);
        List<String> items = Arrays.asList("Item 1", "Item 2", "Item 3");
        data.put("items", items);

        StringWriter writer = new StringWriter();
        template.process(data, writer);

        System.out.println(writer.toString());
    }
}
<!DOCTYPE html>
<html>
<head>
    <title>${title}</title>
</head>
<body>
    ${title}
    
    <p>Welcome, ${name}!</p>
    
    <#if age &gt;= 18>
        <p>You are an adult.</p>
    <#else>
        <p>You are a minor.</p>
    </#if>
    
    <ul>
    <#list items as item>
        <li>${item}</li>
    </#list>
    </ul>
</body>
</html>

以上示例中,example.ftl 是一个 Freemarker 模板文件,代码中的数据会填充到模板中,并通过 process 方法生成最终的 HTML 页面。

结论

Freemarker 是一款强大而灵活的 Java 模板引擎,可以用于生成各种动态内容。本文介绍了