jsp、freemarker、velocity对比

摘要:
表现层技术主要有三种:jsp、freemarker、velocity。velocity应该是最好的。普通的页面freemarker性能最差。可是在复杂页面上的页面上,freemarker的性能比使用tag和el的jsp好。日期金额格式化等等,使用很方便4、支持jsp标签5、能够实现严格的mvc分离以下是一个使用FreeMarker可以实现,而Velocity不能实现的不太全面的特性清单:数字和日期支持能够对不论什么数字类型进行算术运算和比較。FreeMarker会记录问题(日志)在写错指令名时。

在java领域。表现层技术主要有三种:jsp、freemarker、velocity。


jsp是大家最熟悉的技术
长处:
1、功能强大,能够写java代码
2、支持jsp标签(jsp tag)
3、支持表达式语言(el)
4、官方标准。用户群广。丰富的第三方jsp标签库
5、性能良好。jsp编译成class文件运行。有非常好的性能表现
缺点:
jsp没有明显缺点,非要挑点骨头那就是。因为能够编写java代码,如使用不当easy破坏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转义文字:、 、 、f、 、”、’、\,也支持xXXXX使用UNICODE指定字符
(11)高级空白字符移除
FreeMarker坚持移除各行仅仅包括不输出FreeMarker标记的空白字符
对于明显要整修掉不须要的空白字符的指令来说,空白字符是个大问题
(12)集成其他技术
能够在模板中使用JSP标记库
能够直接在Pythonproject中使用
(13)强大的XML转换能力
在2.3版本号中,FreeMarker具有强大的新XML转换能力,使得替代XSLT成为可能
Velocity在这方面是无法真正竞争的。除非改进核心引擎。如支持宏库映射到名字空间,宏中支持局部变量
(14)高级模板元程序
能够捕获输出的不论什么部分到context变量中
能够解释不论什么context变量。假设它是一个模板定义
上述两者的结合使用

转载 http://www.cnblogs.com/yxysuanfa/p/7126381.html

免责声明:文章转载自《jsp、freemarker、velocity对比》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Linux系统编程 —互斥量mutex超哥笔记--linux准备知识(1)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

iOS应用开发最佳实践系列一:编写高质量的Objective-C代码

      本文由海水的味道编译整理,转载请注明译者和出处,请勿用于商业用途! 点标记语法 属性和幂等方法(多次调用和一次调用返回的结果相同)使用点标记语法访问,其他的情况使用方括号标记语法。 良好的风格: view.backgroundColor = [UIColor orangeColor]; [UIApplication sharedAppl...

r语言 列出所有变量

你希望知道目前工作空间中存在哪些已定义的变量和函数。 解决方案 使用ls函数,或者使用ls.str函数了解每个变量更详细的信息。 讨论 ls函数可以显示当前工作空间中所有对象的名称:> x <- 10> y <- 50> z <- c("three", "blind", "mice")> f <- funct...

ioctl() 参数

在驱动程序里, ioctl() 函数上传送的变量 cmd 是应用程序用于区别设备驱动程序请求处理内容的值。cmd除了可区别数字外,还包含有助于处理的几种相应信息。 cmd的大小为 32位,共分 4 个域:     bit31~bit30 2位为 “区别读写” 区,作用是区分是读取命令还是写入命令。      bit29~bit15 14位为 "数据大小"...

anaconda命令行

anaconda命令行 命令行查看版本:conda –version 升级所有工具包:conda upgrade –all conda env --help #查看帮助 安装第三方包 安装第三方包:conda install requests 或者 pip install requests卸载第三方包:conda remove requests 或者 pi...

Linux高级编程--04.GDB调试程序(查看数据)

查看栈信息 当程序被停住了,你需要做的第一件事就是查看程序是在哪里停住的。当你的程序调用了一个函数,函数的地址,函数参数,函数内的局部变量都会被压入“栈”(Stack)中。你可以用GDB命令来查看当前的栈中的信息。 下面是一些查看函数调用栈信息的GDB命令: backtrace / bt :打印当前的函数调用栈的所有信息。如: (gdb) bt #0...

SAP系统中发送公告的几种办法

      刚刚在闪存里看到朋友在闪存里提到:如何在SAP系统发送公告的T-CODE,觉得今后可能会用到,所以顺便在网上搜索了一下相关资料。由于时间关系,太晚了,得休息了,在此我就不再一个个抠图了,直接借用一下别人的文章,将此方法记录了下来,希望今后有用得到的地方……     1、SM02创建消息,并设定有效期。当用户刷新窗口或打开窗口时会显示。这个消息对...