`
bruce198
  • 浏览: 236316 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

FreeMarker vs. Velocity

    博客分类:
  • java
阅读更多
1、概述

l         Velocity是一个简单而且更加轻量级的工具,但是它没有达到FreeMarker能够做的许多任务,而且它的模板语言不是很强大

l         我们认为对于大多数应用程序,FreeMarker比Velocity工作更简单,因为:

?         使用Velocity,你需要寻找特定工具或各种工作环境来一次次的解决典型的模板创作任务,结果会浪费更多时间

?         工作环境经常意味着在Velocity模板中直接使用Java对象的方法,这违反了简单、无编程HTML设计的观念

?         或者将表示任务移到控制器代码中,这违反了MVC模式

l         使用FreeMarker,可以以out-of-the-box(如何翻译确切?)的方式实现Velocity所能做的

 

2、特性比较清单

下面是一个使用FreeMarker能够实现,而Velocity不能实现的不太全面的特性清单:

(1)数字和日期支持

l         可以对任何数字类型进行算术运算和比较,包括精度类型

l         可以比较和显示(格式化)日期/时间值

(2)国际化

l         根据各种内建和定制的数字格式,格式化本地敏感的数字

l         根据各种内建和定制的日期格式,格式化本地敏感和时区敏感的日期

l         标识(变量名)可以包含非英语字符,如重音字符、阿拉伯字符、中文字符等

(3)循环处理

l         可以跳出循环

l         可以在循环外访问循环体内的控制变量

l         可以测试是否达到最后一次循环

(4)模板级别的数组处理

l         可以使用类似[i]语法的索引方式访问数组元素

l         可以查询数组长度

(5)宏

l         宏可以有局部变量

l         可以递归调用宏,同样可以在模板的后面定义要调用的宏

l         调用宏时,可以按位置或名字的方式传递参数

l         宏参数可以有缺省值,使得在调用时忽略参数也有效

l         调用的宏可以有嵌套的体内容(<@myMacro>body</@myMacro>),能够在宏被调用时进行处理

l         宏是纯变量的,可以基于表达式来执行宏,或者作为参数传递给另一个宏

(6)命名空间

l         可以对变量使用多命名空间,这对创建宏库很重要,因为这可以避免应用程序中指定的变量和宏库中变量的名字冲突

(7)使用内建的函数/操作符维护Java无关的string、list和map

l         可以将字符串转换成大/小写、首字符大/小写,对HTML、XML或RTF进行转义处理,substring、split、查询字符串长度、find/replace子串等等

l         通过索引访问list元素,获得子list,合并list,查询list长度,对list排序

l         通过key变量访问map元素,检查map是否为空,获得key或值的list

(8)揭示模板中的错误

l         当访问一个未定义的变量,FreeMarker不会沉默;你可以配置FreeMarker来停止render模板显示错误信息,或者跳过错误部分;无论哪种,FreeMarker会记录问题(日志)

l         在写错指令名时,FreeMarker会抛出异常

(9)高级render控制

l         可以使用一组标记来封装模板的一块区域,以便在块区中所有要修改的地方应用HTML或XML转义(或其它使用FreeMarker表达式表示的转换)

l         FreeMarker有转换器,它们是模板的一块区域,在render时,通过转换过滤;内建的转换器包括空白字符压缩、HTML和XML转义;你可以实现自己的转换器;当然转换器可以嵌套

l         可以使用flush指令显式的flush输出

l         可以使用stop指令停止render

(10)文字

l         除了通常的字符串、数字和布尔值文字,也可以在模板中定义list和map文字

l         支持所有的Java转义文字:\b、\t、\n、\f、\r、\”、\’、\\,也支持\xXXXX使用UNICODE指定字符

(11)高级空白字符移除

l         FreeMarker坚持移除各行只包含不输出FreeMarker标记的空白字符

l         对于明显要整修掉不需要的空白字符的指令来说,空白字符是个大问题

(12)集成其它技术

l         可以在模板中使用JSP标记库

l         可以直接在Python工程中使用

(13)强大的XML转换能力

l         在2.3版本中,FreeMarker具有强大的新XML转换能力,使得替代XSLT成为可能

l         Velocity在这方面是无法真正竞争的,除非改进核心引擎,如支持宏库映射到名字空间,宏中支持局部变量

(14)高级模板元程序

l         可以捕获输出的任何部分到context变量中

l         可以解释任何context变量,如果它是一个模板定义

l         上述两者的结合使用


分享到:
评论

相关推荐

    jsp、freemarker、velocity简介和对比

    ### jsp、freemarker、velocity简介和对比 在Java Web开发领域,模板引擎是连接后端业务逻辑与前端展示层的重要桥梁。本文将重点介绍三种常用的Java Web模板引擎:JSP(Java Server Pages)、Freemarker以及...

    velocity和freemarker的比较

    标题“velocity和freemarker的比较”涉及到的是两个在Java Web开发中常用的模板引擎——Velocity和FreeMarker。它们都是用于将静态模板与动态数据结合,生成HTML或其他类型的文本输出,常用于MVC(模型-视图-控制器...

    freemarker&velocity的使用

    Freemarker和Velocity是两种广泛使用的模板引擎,它们在Java Web开发中扮演着重要的角色,主要用于生成动态HTML或其他格式的文本。这两者都是基于MVC(Model-View-Controller)设计模式,允许开发者将业务逻辑与展示...

    模板:velocity和freemarker的比较

    Velocity和Freemarker模板技术比较 模板技术在现代软件开发中扮演着重要角色,而在目前最流行的两种模板技术中, Velocity 和 Freemarker 独占鳌头。在 WebWork2 中,我们可以随意选择使用 Freemarker 或 Velocity ...

    Velocity 和 FreeMarker区别

    ### Velocity与FreeMarker的区别 在IT领域特别是Java开发中,模板引擎是不可或缺的一部分,它们用于将数据模型转换为HTML、PDF、Word文档等格式。在众多模板引擎中,Velocity和FreeMarker是两种非常受欢迎的选择。...

    FreeMarker概述.pdf

    ### FreeMarker概述 #### 一、FreeMarker简介 FreeMarker是一个功能强大的模板引擎,主要用于根据...相比其他类似的工具如Velocity,FreeMarker提供了更多的特性和更好的用户体验,是开发人员值得考虑的选择之一。

    Freemarker和Velocity的eclipse插件

    总的来说,Freemarker和Velocity的Eclipse插件对于Java Web开发者来说是必不可少的工具,它们将模板引擎的强大功能与Eclipse的优秀开发环境紧密结合,为开发者带来了极大的便利。在实际项目中,结合这些插件,开发者...

    大型商城网站springmvc+freemarker+velocity+ibatis

    标题 "大型商城网站springmvc+freemarker+velocity+ibatis" 暗示了这是一个基于SpringMVC、Freemarker、Velocity和iBatis框架构建的电子商务平台。这个项目可能是一个B2C(Business-to-Consumer)类型的商城,允许...

    超完整FreeMarker中文教程,代码

    什么是FreeMarker? ................................................................................................. 7 我们应该阅读什么内容? .............................................................

    Velocity--java的模板引擎

    import org.apache.velocity.app.VelocityEngine; import org.apache.velocity.Template; import org.apache.velocity.VelocityContext; public class VelocityExample { public static void main(String[] args) ...

    当前流行的模板引擎效率分析(velocity,freeMarker,Smarty4j,httl)

    本篇文章将对四个流行的Java模板引擎——Velocity、FreeMarker、Smarty4j以及HTTL进行效率分析,旨在探讨它们在处理业务逻辑编译和性能方面的优劣。 1. Velocity: Velocity是Apache软件基金会的一个开源项目,以其...

    FreeMarker 手册

    FreeMarker 手册 .......................................................................................................... 1 用于 FreeMarker 2.3.18 .......................................................

    利用velocity模版引擎,自动生产MVC各层代码及各类之间的依赖。

    虽然Velocity通常不直接用于生成HTML,但可以用于生成JSP或FreeMarker等视图模板的辅助类,使得视图的渲染更简洁高效。 3. **Controller**:控制器层作为模型和视图之间的桥梁,处理用户的请求并调用相应的模型方法...

    freemarker-2.3.10.chm

    8. **与其他技术的集成**:例如,如何在Spring MVC框架中使用Freemarker,或者如何与Velocity、JSP等其他视图技术对比。 9. **API参考**:Freemarker API提供了丰富的函数和方法,用于操作模板、数据模型和输出结果...

    Freemarker 实例,Freemarker 实例

    它与JSP、Velocity等技术相似,但更注重于分离业务逻辑和视图层,使得开发者可以专注于设计模板,而不用关心Java代码的实现。下面将详细介绍Freemarker的核心概念、配置、语法以及常见使用场景。 **1. Freemarker...

    Velocity 入门

    - **初始化 Engine**: 创建 `VelocityContext` 实例,将数据放入,然后通过 `Velocity.getEngine()` 获取引擎实例。 - **解析模板**: 使用引擎的 `mergeTemplate()` 方法,传入模板路径和上下文,得到输出字符串。 ...

    struts 2.2 api文档

    最新版struts2帮助文档 软件包分层结构: org.apache.struts2, org.apache.struts2.components,... org.apache.struts2.views.velocity, org.apache.struts2.views.velocity.components, org.apache.struts2.views.xslt

    Struts课堂笔记.rar--struts2的struts.properties配置文件详解

    org.apache.struts2.views.velocity.VelocityManager implementation class org.apache.struts2.views.velocity.VelocityManager接口名 struts.velocity.toolboxlocation The location of the Velocity toolbox ...

    spring mvc与velocity整合

    Spring MVC 是一个强大的Java Web...&lt;bean id="velocityConfig" class="org.springframework.web.servlet.view.velocity.VelocityConfigurer"&gt; &lt;property name="resourceLoaderPath" value="/WEB-INF/velocity/" /&gt; ...

Global site tag (gtag.js) - Google Analytics