什么是FreeMarker
•FreeMarker 是一款模板引擎:即一种基于模板、用来生成输出文本(任何来自于 HTML格式的文本用来自动生成源代码)的通用工具
•FreeMarker 实际上是被设计用来生成 HTML 页面
FreeMarker使用入门
•模板 + 数据模型 = 输出
•1、创建Configuration,生成模板实例
Configuration configuration = new Configuration();
configuration.setDirectoryForTemplateLoading(new File("ftl文件位置"));
•2、指定使用模板文件,生成Template实例
Template template = configuration.getTemplate("flt文件名");
•3、填充数据模型,数据模型就是一个Map
Map<String, String> map = new HashMap<String, String>();
map.put(key, value);
•4、调用Template实例process完成数据合并
template.process(map, 目标Writer输出流);
FreeMarker模板文件
•扩展名.ftl文件 (采用.html文件也可以)
•模板文件由四部分组成
•文本:直接输出的部分
•注释:即<#-- -->格式部分 不会输出
•变量值:${} 或 #{}
•FTL指令 :FreeMarker指令 类似HTML标签,名称前加# 例如 <#list>
FreeMarker 常用指令
•if 指令 --- 条件判断
Welcome ${user}<#if user == "Big Joe">, our beloved leader</#if> !
<#if animals.python.price < animals.elephant.price>
Pythons are cheaper than elephants today.
<#else>
Pythons are not cheaper than elephants today.
</#if>
•list指令 --- 集合遍历
<#list animals as being>
<tr><td>${being.name}<td>${being.price} Euros
</#list>
•include指令 --- 页面包含
<#include "/copyright_footer.html">
处理不存在变量
•不论在哪里引用变量,都可以指定一个默认值来避免变量丢失这种情况, 通过在变量名后面跟着一个!和默认值
•<h1>Welcome ${user!"Anonymous"}!</h1>
•通过放置??来询问 FreeMarker 一个变量是否存在。将它和 if指令合并,那么如果 user 变量不存在的话将会忽略整个问候代码段
•<#if user??><h1>Welcome ${user}!</h1></#if>
内置函数
•字符串使用的内建函数:
•html: 字符串中特殊 HTML 字符需要用实体引用代替(比如<代替<)
•cap_first:字符串的第一个字母变为大写形式
•lower_case:字符串的小写形式
•upper_case:字符串的大写形式
•trim:去掉字符串首尾的空格
•序列使用的内建函数:
•size:序列中元素的个数
•数字使用的内建函数:
•int:数字的整数部分(比如-1.9?int 就是-1)
使用freemarker生成静态缓存文件
测试最终效果(如果实现成功,在界面中执行一次,即会在webapp路径下创建的freemarker中生成一个以ID值为名称的html静态网页)
注意模板的存放位置:
通常模板文件 放在 WEB-INF 下 或者 classes 下