1. 什么是FreeMarker?
FreeMarker是一个模板引擎,简单地讲,它就是将你的数据映射到模板上,形成一个静态的文件,可以是HTML文件,也可以是其他类型的一些文件。
下面是对其官网上描述的翻译:
Apache FreeMarker是一个模板引擎:基于模板和可变数据,用于文本生成的库(这些文本可以是HTML网页,e-mails,配置文件,源代码,等等)。模板是使用FreeMarker模板语言(FTL)编写的,这是一种简单的专门语言(不像PHP那样是一种成熟的编程语言)。通常,使用一种通用编程语言(如Java)来准备数据(发出数据库查询,进行业务计算)。然后,Apache FreeMarker显示使用模板准备的数据。在模板中,您关注的是如何显示数据,而在模板之外,您关注的是要显示什么数据。
特此附上官网地址:https://freemarker.apache.org/
这种方法通常称为MVC (Model View Controller)模式,在动态web页面中尤其流行。它有助于将web页面设计人员(HTML作者)与开发人员(通常是Java程序员)分隔开来。设计人员不会在模板中面对复杂的逻辑,并且可以在不需要程序员更改或重新编译代码的情况下更改页面的外观。
虽然FreeMarker最初是为在MVC web应用程序框架中生成HTML页面而创建的,但它并不绑定到servlet或HTML或任何与web相关的东西。它也用于非web应用程序环境。
2. 使用FreeMarker生成HTML文件
通过上面的介绍,了解了什么是FreeMarker之后,下面介绍本篇文章的一个重点,如何使用FreeMarker生成HTML文件。
大致流程:
(1)创建一个Configuration实例
(2)创建一个数据模型
(3)获取模板
(4)合并模板与数据模型
(5)整合
2.1 创建一个Configuration实例
首先,该实例是freemarker.template.Configuration的一个实例。通过这个实例你可以设置字符编码,加载模板文件,设置异常处理等。
官方文件使用的是,setDirectoryForTemplateLoading,我在项目里使用的是setClassForTemplateLoading,源代码中也有其他一些重载函数,感兴趣的可以看看。
一般情况下,这个configuration实例是单例的,除非你有用到多个独立的FreeMarker组件。尽量不要重新创建配置实例,因为会导致模板缓存丢失。配置实例应该是应用程序级的单例。
2.2 创建一个数据模型
一般使用java.lang和java.util包下面的类就可以构建数据模型,当然,你也可以自定义实体类。
假设你的数据对象是这样创建的:
其中Product是自定义的一个实体类,包含url和name两个属性。
2.3 获取模板
通过前面的configuration实例获取模板,如下:
2.4 合并模板与数据模型
我们已经有了一个数据模型(root)和一个模板(temp),所以为了得到输出,我们必须合并它们。这是通过模板的process方法完成的。它以数据模型根和写入器作为参数。它将生成的输出写入写入器。
2.5 整合
通过上面的介绍,我们来用一个小项目将所有内容整合一下,该项目取自官网,有部分更改。
test.ftlh文件
3. 相关链接:
FreeMarker Java API官网:https://freemarker.apache.org/docs/api/index.html
FreeMarker 生成HTML的操作流程:https://freemarker.apache.org/docs/pgui_quickstart.html