一、简介
FreeMarker:
FreeMarker是一个用Java语言编写的模板引擎,它基于模板来生成文本输出。
所谓模板,就是一份已经写好了基本内容,有着固定格式的文档,其中空出或者用占位符标识的内容,由使用者来填充,不同的使用者给出的数据是不同的。在模板中的占位符,在模板运行时,由模板引擎来解析模板,并采用动态数据替换占位符部分的内容。
FreeMarker与Web容器无关,即在Web运行时,它并不知道Servlet或HTTP。它不仅可以用作表现层的实现技术,而且还可以用于生成XML,JSP或Java 文等。
Velocity:
Velocity 是一个基于java 的模板引擎(template engine). 它可以让视图的设计者在web 页面中引用java 代码中定义的数据对象和命令。从而使Web designers 和java 开发者依照MVC 思想(Model-View-Controller )开发系统,这意味着Web designers 只须将精力注用于良好表现力的视图外观设计,而Java程序员则只要关心着如何写出高效简洁的java 对象以实现业务逻辑—–Velocity 会将他们组装到一起.
二、功能区别
日期和数字的支持
FreeMarker可以对任意数量的类型执行运算和比较,包括任意精度类型,而不仅仅是整数。
FreeMarker可以比较和显示(格式化)日期/时间值。
国际化
FreeMarker可以基于各种各样的内置和自定义数字或者日期格式,来格式化数字区域或者日期地区时区等。
循环处理
FreeMarker支持退出循环 ,可以在内部循环体去访问外部循环的变量
并且可以得知当前是否到了循环的结束位置
支持模版级别的数组处理
可以用[i]的语法来访问数组元素,可以获取到数组的长度
内置数据类型的操作
FreeMarker能提示模版中的拼写错误以及其他错误。当访问一个不存在的变量时,FreeMarker 在执行时会报错,并且支持通过配置来指定 FreeMarker 在碰到此类错误的行为,同时会在日志中记录此错误信息; 如果输入错误的指令,FreeMarker将抛出一个异常。
更高级的文本输出工具
支持所有的Java字符串转义如:\ b,\ t,\ n,\ f,\ r,\“,\’,\,也支持\ xXXXX用UNICODE代码指定字符。
高级的空格清除
FreeMarker 可以自动的删除一些多余的空格、跳格、换行等字符
也支持提供指令来删除多余的空格
与其他技术的集成
提供JSP 标签库以便在 JSP 中嵌入 FreeMarker 模版 可以直接跟 Python 对象一起工作
三、选型:
纵观各大国内外博客文章,几乎清一色的倒向FreeMarker这边。除了使用标签的性能更高,更多的还是FreeMarker支持功能多,以及更多的框架支持吧。
PS:1.5及以上版本的spring boot已经不支持velocity。
四、 常见语法比对:
1.变量定义与赋值:
Freemarker:
<#assign x=”freemarker”>
Velocity:
<#set($x=”velocity”)>
2.逻辑运算符
FreeMarker和velocity一致:&& ;|| ; !
3.逻辑判断:
Freemarker:
<#if condition>…<#elseif condition>…<#else>…</#if>
<#switch value><#case refValue1>…<#break><#defalut></#switch>
Velocity:
if(condition)…#elseif(condition)…#else…#end
4.循环体
FreeMarker:
<#list list as item></#list>
Velocity:
#foreach($item in $list)
5.属性引用:
Freemarker和velocity一致,均为通过“.”来获取对象的属性值
五、 整体比对