jsp,velocity,freemark页面引擎的比较
jsp是大家最熟悉的技术
优点:
1、功能强大,可以写java代码
2、支持jsp标签(jsp tag)
3、支持表达式语言(el)
4、官方标准,用户群广,丰富的第三方jsp标签库
5、性能良好。jsp编译成class文件执行,有很好的性能表现
缺点:
jsp没有明显缺点,非要挑点骨头那就是,由于可以编写java代码,如使用不当容易破坏mvc结构。
velocity是较早出现的用于代替jsp的模板语言
优点:
1、不能编写java代码,可以实现严格的mvc分离
2、性能良好,据说比jsp性能还要好些
3、使用表达式语言,据说jsp的表达式语言就是学velocity的
缺点:
1、不是官方标准
2、用户群体和第三方标签库没有jsp多。
3、对jsp标签支持不够好
freemarker
优点:
1、不能编写java代码,可以实现严格的mvc分离
2、性能非常不错
3、对jsp标签支持良好
4、内置大量常用功能,使用非常方便
5、宏定义(类似jsp标签)非常方便
6、使用表达式语言
缺点:
1、不是官方标准
2、用户群体和第三方标签库没有jsp多
选择freemarker的原因:
1、性能。velocity应该是最好的,其次是jsp,普通的页面freemarker性能最差(虽然只是几毫秒到十几毫秒的差距)。但是在复杂页面上(包含大量判断、日期金额格式化)的页面上,freemarker的性能比使用tag和el的jsp好。
2、宏定义比jsp tag方便
3、内置大量常用功能。比如html过滤,日期金额格式化等等,使用非常方便
4、支持jsp标签
5、可以实现严格的mvc分离
下面是一个使用FreeMarker能够实现,而Velocity不能实现的不太全面的特性清单:
(1)数字和日期支持
可以对任何数字类型进行算术运算和比较,包括精度类型
可以比较和显示(格式化)日期/时间值
(2)国际化
根据各种内建和定制的数字格式,格式化本地敏感的数字
根据各种内建和定制的日期格式,格式化本地敏感和时区敏感的日期
标识(变量名)可以包含非英语字符,如重音字符、阿拉伯字符、中文字符等
(3)循环处理
可以跳出循环
可以在循环外访问循环体内的控制变量
可以测试是否达到最后一次循环
(4)模板级别的数组处理
可以使用类似[i]语法的索引方式访问数组元素
可以查询数组长度
(5)宏
宏可以有局部变量
可以递归调用宏,同样可以在模板的后面定义要调用的宏
调用宏时,可以按位置或名字的方式传递参数
宏参数可以有缺省值,使得在调用时忽略参数也有效
调用的宏可以有嵌套的体内容(<@myMacro>body</@myMacro>),能够在宏被调用时进行处理
宏是纯变量的,可以基于表达式来执行宏,或者作为参数传递给另一个宏
(6)命名空间
可以对变量使用多命名空间,这对创建宏库很重要,因为这可以避免应用程序中指定的变量和宏库中变量的名字冲突
(7)使用内建的函数/操作符维护Java无关的string、list和map
可以将字符串转换成大/小写、首字符大/小写,对HTML、XML或RTF进行转义处理,substring、split、查询字符串长度、find/replace子串等等
通过索引访问list元素,获得子list,合并list,查询list长度,对list排序
通过key变量访问map元素,检查map是否为空,获得key或值的list
(8)揭示模板中的错误
当访问一个未定义的变量,FreeMarker不会沉默;你可以配置FreeMarker来停止render模板显示错误信息,或者跳过错误部分;无论哪种,FreeMarker会记录问题(日志)
在写错指令名时,FreeMarker会抛出异常
(9)高级render控制
可以使用一组标记来封装模板的一块区域,以便在块区中所有要修改的地方应用HTML或XML转义(或其它使用FreeMarker表达式表示的转换)
FreeMarker有转换器,它们是模板的一块区域,在render时,通过转换过滤;内建的转换器包括空白字符压缩、HTML和XML转义;你可以实现自己的转换器;当然转换器可以嵌套
可以使用flush指令显式的flush输出
可以使用stop指令停止render
(10)文字
除了通常的字符串、数字和布尔值文字,也可以在模板中定义list和map文字
支持所有的Java转义文字:\b、\t、\n、\f、\r、\”、\’、\\,也支持\xXXXX使用UNICODE指定字符
(11)高级空白字符移除
FreeMarker坚持移除各行只包含不输出FreeMarker标记的空白字符
对于明显要整修掉不需要的空白字符的指令来说,空白字符是个大问题
(12)集成其它技术
可以在模板中使用JSP标记库
可以直接在Python工程中使用
(13)强大的XML转换能力
在2.3版本中,FreeMarker具有强大的新XML转换能力,使得替代XSLT成为可能
Velocity在这方面是无法真正竞争的,除非改进核心引擎,如支持宏库映射到名字空间,宏中支持局部变量
(14)高级模板元程序
可以捕获输出的任何部分到context变量中
可以解释任何context变量,如果它是一个模板定义
上述两者的结合使用
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。