Velocity与FreeMarker

来自站长百科
跳转至: 导航、​ 搜索

导航: 上一页


相比较FreeMarker而言,Velocity更加简单、轻量级,但它的功能却没有FreeMarker那么强大。依据评测的结论, freemarker 稍快一些。差别在毫秒级别,对用户而言可以忽略不计,若超大流量,考虑负载时,较倾向后者。

velocity 出现得较早些,也有更多的受众,因此在考虑到人员配给上,略占优势。但是模板技术上手都很快的,所以无所谓。

对于大部分的应用来说,使用 FreeMarker 比 Velocity 更简单,因为 Velocity 还必须编写一些自定义的toolbox类以及一遍遍重复的编写一些比较通用的模版代码,因此也就丧失了刚开始开发时更多的宝贵时间。另外使用工具类和变通的方法在模版引擎中似乎不是一个非常有效的做法。同时,Velocity 的做法使得在Velocity的模版中大量的跟 Java 对象进行交互,这违反了简单的原则,尽管你也可以将代码转入控制器中实现。当然,如果你像使用 Velocity 一样来使用 FreeMarker ,那么 FreeMarker 也可以跟 Velocity 一样简单。

Velocity 一个优于FreeMarker的地方在于它有很广泛的第三方支持以及一个非常庞大的用户社区,你可以通过这个社区获得到很多的帮助,相反的FreeMarker在这方面要差很多。当然,也有越来越多的第三方软件开始在支持 FreeMarker 。

下面是一些 FreeMarker 能做到的,而 Velocity 做不到的功能列表(且看着):

  • 日期和数字的支持

您可以执行运算和比较,对任意数量的类型,包括任意精度类型,而不仅仅是整数。 您可以比较和显示(格式化)日期/时间值。

  • 国际化

您可以格式数字区域,各种各样的内置和自定义数字格式模式。 您可以格式日期地区和时区,各种各样的内置和定制的日期格式模式。 标识符(变量名)可以包含非英语字母一样重音字母,阿拉伯字母,汉字等

  • 循环处理

您可以退出循环 您可以访问控制变量外循环机构的内部循环 您可以得知当前是否到了循环的结束位置

  • 模版级别的数组处理

您可以使用[i]的语法来访问数组元素,包括原始的和非原始的指数 可以获取到数组的长度

  • 宏定义

宏调用可以通过位置或名称进行参数传递 宏的参数可以设定默认值,在调用宏时如果没有指定该参数,则使用默认值代替 通过 <@myMacro>body</@myMacro> 可以支持宏的嵌套 可以通过文本表达的“宏的名称”来直接调用某个宏 宏允许先使用再定义 宏可以定义局部变量(新版本的Velocity也通过#local指令来实现该功能,尽管官方的文档还没有进行介绍)

  • 命名空间

您可以使用多个名称空间的变数。当您建立“宏库”时是非常有用的 ,因为可以防止名称冲突与申请特定变量或与其他宏变量的库。

  • 内置与 Java 语言无关的字符串、列表、Map 的操作方法
  • 能提示模版中的拼写错误以及其他错误

当访问一个不存在的变量时,FreeMarker 在执行该模版时会报错,通过配置,你可以指定 FreeMarker 在碰到此类错误时是停止执行,还是忽略该错误,同时 FreeMarker 会在日志中记录此问题; 如果您输入错误指令的名称,FreeMarker将抛出一个异常。

  • 更高级的文本输出工具


  • 文本处理

支持Java的特殊字符处理,例如\b, \t, \n, \f, \r, \", \', \\,以及UNICODE的\xXXXX 除了通常的字符串,数字,和布尔常量您可以定义列表和地图文字以及内部模板

  • 高级的空格清除

FreeMarker 将删除一些多余的空格、跳格、换行等字符,从而消除一些令人厌烦的明显多余的空格 FreeMarker 也提供指令来删除多于的空格

  • 与其他技术的集成

提供JSP 标签库以便在 JSP 中嵌入 FreeMarker 模版 可以直接跟 Python 对象一起工作

  • 更强大的XML转换功能
  • 先进的模板元程序

您可以捕捉到输出的任意部分范本背景变量 您可以任意解释的范围变量,就好像它是一个模板定义


参考资料[ ]