在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转义文字:\b、\t、\n、\f、\r、\”、\’、\\,也支持\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对比的更多相关文章

  1. JSP FreeMarker Velocity 原理

    JSP原理 JSP的运行原理:JSP 本质上是一个Servlet. 每个JSP 页面在第一次被访问时,JSP引擎将它翻译成一个Servlet 程序,然后再把这个 Servlet 源程序编译成Servl ...

  2. SpringMvc多视图配置(jsp、velocity、freemarker) velocity在springmvc.xml配置VelocityViewResolver,VelocityConfigurer,FreeMarkerConfigurer,FreeMarkerViewResolver

    ?xml version="1.0"encoding="UTF-8"?> <beans xmlns="http://www.springf ...

  3. Velocity与Jsp、Freemarker的对比

    在java领域,表现层技术主要有三种:jsp.freemarker.velocity.jsp是大家最熟悉的技术 优点: 1.功能强大,可以写java代码 2.支持jsp标签(jsp tag) 3.支持 ...

  4. SpringMvc多视图配置(jsp、velocity、freemarker) 在src目录views.properties配置

    #welcome为modelAndView.setViewName(" welcome " ) ; 中的welcome .(class)固定写法 welcome.(class)=o ...

  5. [Spring MVC] - JSP + Freemarker视图解释器整合

    Spring MVC中如果只使用JSP做视图,可以使用下面这段即可解决: <!-- 视图解释类 --> <bean class="org.springframework.w ...

  6. [Spring MVC] - JSP + Freemarker视图解释器整合(转)

    Spring MVC中如果只使用JSP做视图,可以使用下面这段即可解决: <!-- 视图解释类 --> <bean class="org.springframework.w ...

  7. Freemarker教程1(基本使用)

    简介 FreeMarker是一款模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页.电子邮件.配置文件.源代码等)的通用工具. 它不是面向最终用户的,而是一个Java类库,是 ...

  8. SSH框架详解

    1.什么是ssh? SSH对应 struts spring hibernate struts 采用MVC模式,主要是作用于用户交互 spring 采用IOC和AOP~作用比较抽象,是用于项目的松耦合 ...

  9. Struts2知多少(2) Struts2 是什么

    Struts2是流行和成熟的基于MVC设计模式的Web应用程序框架. Struts2不只是Struts1下一个版本,它是一个完全重写的Struts架构. WebWork框架开始以Struts框架为基础 ...

随机推荐

  1. HashMap与TreeMap的区别?

    HashMap与TreeMap的区别? 解答:HashMap通过hashcode对其内容进行快速查找,而TreeMap中所有的元素都保持着某种固定的顺序,如果你需要得到一个有序的结果你就应该使用Tre ...

  2. 什么是Web容器?

    什么是Web容器? 解答:容器就是一种服务程序,在服务器一个端口就有一个提供相应服务的程序,而这个程序就是处理从客户端发出的请求,如JAVA中的Tomcat容器,ASP的IIS或PWS都是这样的容器.

  3. SQL Server 2008 SP3简体中文版官方下载

    微软日前公开发布了SQL Server 2008 SP3,用户可以从微软下载中心获取SP服务包和功能包升级.SP3主要包括自SQL Server 2008 SP2以来的累积更新,修复了用户反馈的一些问 ...

  4. URL编码,空格和+

    下表中列出了一些URL特殊符号及编码 + URL 中+号表示空格 %2B 空格 URL中的空格可以用+号或者编码 %20 / 分隔目录和子目录 %2F ? 分隔实际的URL和参数 %3F % 指定特殊 ...

  5. 关闭ReSharper中的[ Use 'var' ]提示(Disable C# “var” Recommendation in ReSharper)

    ReSharper,确实是个很不错的工具,代码如果写得不规范他会提示,而且可以根据自己公司的需求自定义代码规范. 默认设置的提示已经相当完美,但美中不足就是老提示你用var来代替所有类型. 按以下步骤 ...

  6. VS本地调试oracle报错解决方法

    同事的项目,SVN下载下来以后一直报错,后来确认一下 1本地要安装oracle 2代码用的是64位的,所以本地安装也要64位的oracle 3VS调试用的IIS Express也要是64位的,激活方法 ...

  7. ext布局问题之tab panel内的gridpanel内容数据变多,出现滚动条

    1)解决之道: 1.修改tabPanel var tabs= new Ext.TabPanel({ border: false, region:'center', id:'center', activ ...

  8. 在Nginx 配置防止单IP 攻击频次的控制 和 大流量攻击

    nginx可以通过HttpLimitReqModul和HttpLimitZoneModule配置来限制ip在同一时间段的访问次数. HttpLimitReqModul用来限制连单位时间内连接数的模块, ...

  9. 第九篇:使用 lstat 函数获取文件信息

    前言 在之前的文章中,描述过如何用 fcntl 函数改变文件的状态标记.但,文件还有很多信息,如文件类型,权限设置,设备编号,访问时间等等.如果要获取这些信息,则使用函数 lstat 可以轻松达到这个 ...

  10. ryu的RESTAPI简介——我主要用于下发和查看流表

    一.Rest API简介 REST即表述性状态传递(RepreSentational State Transfer),是一种针对网络应用的设计和开发方式,可以降低开发的复杂性,提高系统的可伸缩性. 表 ...