zoukankan      html  css  js  c++  java
  • jsp,velocity,freemark页面引擎的比較

    在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变量。假设它是一个模板定义
    上述两者的结合使用

  • 相关阅读:
    NSDate的处理:前一天、后一天等关于时区偏移的处理以及在数据库中的使用
    《powershell 的版本号所引起的载入 FSharp 编译器问题》基本解决
    hdu 2055 An easy problem (java)
    昨天登陆页面,无法进入后台,今天攻克了
    关于ubuntu下qt编译显示Cannot connect creator comm socket /tmp/qt_temp.xxx/stub-socket的解决的方法
    (转)Struts2的拦截器
    (转)Struts2的标签库
    (转)OGNL与值栈
    (转)Struts2访问Servlet的API及......
    (转)Struts2快速入门
  • 原文地址:https://www.cnblogs.com/yxysuanfa/p/7126381.html
Copyright © 2011-2022 走看看