FreeMarker是一款模板引擎:即一种基于模板和要改变的数据,并用来生成输出文本(HTML网页、电子邮件、配置文件、源代码等)的通用工具。它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。
FreeMarker是免费的,基于Apache许可证2.0版本发布。其模板编写为FreeMarker Template Language(FTL),属于简单、专用的语言。需要准备数据在真实编程语言中来显示,比如数据库查询和业务运算,之后模板显示已经准备好的数据。在模板中,主要用于如何展现数据,而在模板之外注意于要展示什么数据。
官网地址:https://freemarker.apache.org/

上图中,FreeMarker 根据输入的模版文件和数据(Java对象)生成输出,这里的输出可以使 HTML文件、文本文件、Java代码等。
在本教程中,您将学习到怎样使用 FreeMaker 来完成工作。主要内容如下:
学习 FreeMaker 的基础知识;
怎样利用 FreeMarker 实现 HTML 页面,开发自己的 Web 引用;
怎样利用 FreeMarker 输出 Java 项目开发模版代码,例如:数据库的 CRUD 操作等;
怎样利用 FreeMaker 动态生成配置文件;
怎样将 FreeMaker 集成到 Spring、Spring Boot 等第三方框架;
在正式学习 FreeMarker 之前,我们先看看一个非常简单的例子(FreeMaker Hello)。IDEA项目结构如下图:

(1)加入 FreeMaker 的 Maven 依赖到你的项目。
<!-- https://mvnrepository.com/artifact/org.freemarker/freemarker --> <dependency> <groupId>org.freemarker</groupId> <artifactId>freemarker</artifactId> <version>2.3.23</version> </dependency>
(2)模版文件,template.ftl 文件
${username}, 你好!
欢迎学习 FreeMaker 零基础教程(3)Java 代码,Demo1.java 文件
package com.hxstrive.freemarker.demo1;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateExceptionHandler;
import freemarker.template.Version;
import java.io.File;
import java.io.FileWriter;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
public class Demo1 {
public static void main(String[] args) throws Exception {
// 1. Configure FreeMarker
// You should do this ONLY ONCE, when your application starts,
// then reuse the same Configuration object elsewhere.
Configuration cfg = new Configuration(Configuration.VERSION_2_3_23);
// Where do we load the templates from:
cfg.setClassForTemplateLoading(Demo1.class, "/templates/");
// Some other recommended settings:
cfg.setDefaultEncoding("UTF-8");
cfg.setLocale(Locale.CHINESE);
cfg.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER);
// 2. Proccess template(s)
// You will do this for several times in typical applications.
// 2.1. Prepare the template input:
Map<String, Object> input = new HashMap<String, Object>();
input.put("username", "www.hxstrive.com");
// 2.2. Get the template
Template template = cfg.getTemplate("template.ftl");
// 2.3. Generate the output
// Write output to the console
Writer consoleWriter = new OutputStreamWriter(System.out);
template.process(input, consoleWriter);
// For the sake of example, also write output into a file:
Writer fileWriter = new FileWriter(new File("output.txt"));
try {
template.process(input, fileWriter);
} finally {
fileWriter.close();
}
}
}(4)输出内容,output.txt 文件
www.hxstrive.com, 你好! 欢迎学习 FreeMaker 零基础教程
上面实例展示了怎样去使用 FreeMaker 将数据 + 模版输出我们需要的东西。这里将不会仔细分析实例中的 Java 代码,后面会有非常详细的介绍。