在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. linux—安装定时插件crontab

    安装crontab [root@iZ25j0kywimZ ~]# yum install -y vixie-cron Loaded plugins: security base | 3.7 kB 00 ...

  2. js定时器(执行一次、重复执行)

    代码如下: <script> //定时器 异步运行 function hello(){ alert("hello"); } //使用方法名字执行方法 var t1 = ...

  3. 什么是 end-to-end 神经网络?——知乎解答

    什么是 end-to-end 神经网络? https://www.zhihu.com/question/51435499 解答1 张旭 像机器一样学习,像人一样生活 YJango 等   端到端指的是 ...

  4. 要生成一个窗口,通常使用Window的子类Frame类进行实例化

    要生成一个窗口,通常使用Window的子类Frame类进行实例化,而不是直接使用Window 类,框架的外观就像平常Windows系统下的窗口,有标题.边框. 菜单 和大小等. setSize()方法 ...

  5. php form 图片上传至服务器上

    本文章也是写给自己看的,因为写的很简洁,连判断都没有,只是直接实现了能上传的功能. 前台: <form action="upload.php" method="PO ...

  6. Linux文件的打包与压缩

    打包命令: tar tar 的选项与参数非常的多!我们只讲几个常用的选项,更多选项您可以自行 man tar 查询罗! [root@www ~]# tar [-j|-z] [cv] [-f 创建的档名 ...

  7. 【转】Windows Dump文件获取

    dump文件是进程的内存镜像.可以把程序的执行状态,即当时程序内存空间数据通过调试器保存到dump文件中. 1.利用WinDbg里的adplus来获取dump文件 Adplus.vbs 是一个Visu ...

  8. 好久没写blog了 ~ 换了个城市,换了个公司,各种忙碌

    最近一直在忙工作交接以及换城市.入职的事情 ~~~ 新公司做C++的比较少,so全上C++11了,写代码各种爽. 最近应该会写一点关于QT的blog , 学到新知识了哈.

  9. dropload 使用表

    移动端下拉刷新.上拉加载更多插件 依赖 (dependence) Zepto 或者 jQuery 1.7以上版本,推荐jQuery 2.x版本(二者不要同时引用) Zepto or jQuery 1. ...

  10. AWS系列-根设备类型

    1.AWS根设备类型分为两类 实例存储(本地存储) EBS存储(网络存储) 2.实例存储 系统和磁盘在同一主机上 3.EBS存储 Elastic Block Storage EBS可能与云主机不在一台 ...