一、什么是FreeMarker
Freemarker是一个模板引擎,基于模板生成文本输出的通用工具,是一个java类库,程序员可以嵌入他们所开发产品的组件。
Freemarker主要用于MVC中的view层,生成html展示数据给客户端,可以完全替代jsp。
Freemarker通常由Java程序准备要显示的数据,由FreeMarker生成页面,通过模板显示准备的数据。
二、模板编写(FTL)
模板编写为FreeMarker Template Language (FTL)
2.1模板文件
模板文件和通常的静态HTML页面一样存放在web服务器上,当访问该页面时,FreeMarker会介入执行,动态转换模板,将最新的数据内容替换掉模板中${...}的部分,之后将结果发送到访问者的web浏览器中。模板文件示例如下:
<html>
<head>
<title>Welcome!</title>
</head>
<body>
<h1>Welcome ${user}!</h1>
<a href="${latestProduct.url}">${latestProduct.name}</a>!
</body>
</html>
其中显示的数据是在 FreeMarker 之外准备的,通常是一些 "真正的" 编程语言(比如Java) 所编写的代码。这种显示逻辑和业务逻辑相分离的做法是非常有用的。
在HTML中放置能被FreeMarker所解析的特殊代码片段:
- 插值${...}:FreeMarker将会输出真实的值来替换大括号内的表达式。
- FTL 标签:FTL标签也称为指令,以
#
开头。下面会详细介绍一些指令。 - 注释:使用
<#--
and-->
来进行注释。
2.1.1常用的FTL指令
- list 指令
当需要列表显示内容时,list指令是必须的。
<p>We have these animals:
<table border=1>
<#list animals as animal>
<tr><td>${animal.name}<td>${animal.price} Euros
</#list>
</table>
那么输出结果将会是这样的:
<p>We have these animals:
<table border=1>
<tr><td>mouse<td>50 Euros
<tr><td>elephant<td>5000 Euros
<tr><td>python<td>4999 Euros
</table>
2.2 数据模型
为模板准备的数据整体被称作为 数据模型。数据模型是树形结构(就像硬盘上的文件夹和文件),在视觉效果上, 数据模型可以是:
(root)
|
+- user = "Big Joe"
|
+- latestProduct
|
+- url = "products/greenmouse.html"
|
+- name = "green mouse"
上面只是一个形象化显示;数据模型不是文本格式,它来自于Java对象。 对于Java程序员来说,root就像一个有 getUser()
和 getLatestProduct()
方法的Java对象, 也可以有 "user"
和 "latestProducts"
键值的Java Map
对象。相似地,latestProduct
就像是有 getUrl()
和getName()
方法的Java对象。
总的来说:模板 + 数据模型 = 输出