Freemarker是什么
- FreeMarker是模版引擎:是一种基于模版和要改变的数据,并用来生成(HTML页面、邮件、配置文件、源代码等)的通用工具。
用Freemarker的理由
1、性能。velocity应该是最好的,其次是jsp,普通的页面freemarker性能最差(虽然只是几毫秒到十几毫秒的差距)。但是在复杂页面上(包含大量判断、日期金额格式化)的页面上,freemarker的性能比使用tag和el的jsp好。
2、宏定义比jsp tag方便
3、内置大量常用功能。比如html过滤,日期金额格式化等等,使用非常方便
4、支持jsp标签
5、可以实现严格的mvc分离
Freemarker规则整理
FreeMarker模版文件主要有4部分组成:
- 文本:直接输出的部分;
- 插值:
${}
#{}
格式的部分,将使用数据模型中的部分替代输出; - FTL指令:FreeMarker指定的和HTML标记类似的标签,名字前加
#
用来区分,不输出; - 注释:
<#--此处为注释文本-->
,不输出;
<html>
<head>
<title>welcome to FreeMarker</title>
</head>
<body>
<#--此处为注释-->
<#-- 下面为插值 -->
<h2>Welcome ${user} !</h2>
<#-- 下面为FTL指令 -->
<#list>
<li>${sth.name} for ${sth.price}</li>
</list>
</body>
</html>
插值规则
FreeMarker的差值有两种类型:
- 通用插值
${expr}
- 数字格式化插值
#{expr}
或#{expr;format}
基本输出:
- 输出
${user.name}
- 空值判断
${
user.name?if_exists}
${
user.name?default('xxx')}
${
user.name!"xxx"} 默认值xxx
- 日期格式
${user.name?string('yyyy-MM-dd')}
- 数字格式
${age?string.number} //20
${age?string.currency} //$20.00
${age?string.percent} //20%
FTL指令规则
在FreeMarker中,使用FTL标签来使用指令,FreeMarker有3种FTL标签,与HTML类似:
- 开始标签
<#directName param>
- 结束标签
</#directName>
- 空标签
<#directName param />