FreeMarker与Velocity的区别

来源:互联网 发布:mac qingli ds store 编辑:程序博客网 时间:2024/06/05 11:56

       自己也总结了,但是有几点也差了点感觉,在这里就用网络上一个大神的著作,最终解释权归wanghjbuf。 

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

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

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转换功能
  • 先进的模板元程序

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

1 0