Velocity 是一个基于java 的模板引擎(template engine). 它可以让视图的设计者在web 页面中引用java 代码中定义的数据对象和命令。从而使Web designers 和java 开发者依照MVC 思想(Model-View-Controller )开发系统,这意味着Web designers 只须将精力注用于良好表现力的视图外观设计,而Java程序员则只要关心着如何写出高效简洁的java 对象以实现业务逻辑—–Velocity 会将他们组装到一起.
相比传统的jsp、PHP 等脚本语言,Velocity 彻底的将避免了在视图设计中出现的java 代码, 从而保证了web site 的长期可维护性.
Apache 站点提供的另外一个框架Turbine可以和Velocity 有效结合以实现true MVC model.
一、我们来简要看看Velocity模板语言(VTL)
1、VTL 声明( statement),所有的VTL statement 都是以#开头,且包含一个指示符,当客户访问你的页面时, the Velocity Templating Engine 将搜索页面中的所有# 符号,如果确定这是一个VTL 声明时就按一定规则处理动态内容, 符号#仅仅只是表明这可能是一个VTL 声明.
2、VTL注释:单行注释是以## 开头的一行文字.如要写下多行注释,将它们放入#* 和*#间
3、Velocity references 从java 语法中汲取了一些优点以便模板设计者更容易使用VTL.
VTL 汲取了java 语法和java bean 的一些简洁语法以解析java 代码中Context 中的对象和这些对象的命令及属性—这样,一个java 对象的所有功能都可以展示到视图中了.
4、References(引用)
VTL 中有三种references:变量引用(variables),属性引用(properties)和命令引用(methods). 做为一个使用VTL 的设计者, 你和你的java 软件工程师必须就模板中引用的特定名了(就是$后的名字)达成一致的协议!这样,模板和java 代码才可按照你们的意图去结合以输出正确的内容.
所有的引用在模板中都表现为一个字符串. 假设一个引用变量$foo 的值事实上是一个int, Velocity engine 在处理时将调用它的.toString()去解析这个字符串所代表的对象(int).
注意:模板中引用的必须是通过java Bean 中的getter/setter 实现的,而直接的java 对象的数据域是不能直接引用的,如$foo.Name 会解析到class Foo’s getName() 的实例方法,但不会解析到Foos 类的public Name 这个实例变量.
5、指令(directives)
模板设计者使用“引用“生成动态内容, 指令(directives) – 简单的说就是设计者在模板中操作java对象—让视图设计者全面控制输出内容的格式.
指令总是以#开头后面紧跟具体的指令符.
注意:set指令中,如果右边的操作数是一个属性或命令的引用而返回null,那么赋值将不会成功,且在随后的VTL中也不能再取出使用. 如下例:
#set( $result = $query.criteria(“name”) )
The result of the first query is $result
#set( $result = $query.criteria(“address”) )
The result of the second query is $result
如果$query.criteria(“name”) 返回的是字符串”bill”, 但$query.criteria(“address”) 返回null,上面的TVL 输出结果将是:
The result of the first query is bill
The result of the second query is bill
6、 指令#literal 元素可以用来输出字面意思,如下:
#literal()
#foreach ($woogie in $boogie)
nothing will happen to $woogie
#end
#end
会输出::
#foreach ($woogie in $boogie)
nothing will happen to $woogie
#end
7、属性引用中的属性查找规则
前己提及,属性可以引用到对象的命令. Velocity 会使用合适的策略选择引用到的命令. 它会根据协定
的命令命令格式查找. 无论属性引用的的名字是否大小写,Velocity 都有固定的查找规则.如在
$customer.address 引用时,查找顺序是:
1. getaddress()
2. getAddress()
3. get(“address”)
4. isAddress()
对于VTL中大写的属性名Address 引用,将是:
1. getAddress()
2. getaddress()
3. get(“Address”)
4. isAddress()
8、Velocity使用==来做比较
注意:==计算与java中的==计算有些不同:不能用来测试对象是否相等(指向同一块内存)Velocity中是否相等仅直接的用来比较numbers,strings的值,orobjects的toString()结果是否相等.如果是不同的对象,会调用它们的toString()命令结果来比较.
9、当Velocity应用余应用程序时,一般分一下几步:
(1)、初始化Velocity
(2)、创建context对象
(3)、添加数据到context
(4)、选择模板
(5)、合并模板和数据,产生输出页面
二、Velocity与Jsp、Freemarker的对比
在java领域,表现层技术主要有三种:jsp、freemarker、velocity。
jsp是大家最熟悉的技术
优点:
1、功能强大,可以写java代码
2、支持jsp标签(jsp tag)
3、支持表达式语言(el)
4、官方标准,用户群广,丰富的第三方jsp标签库
5、性能良好。jsp编译成class文件执行,有很好的性能表现
缺点:
jsp没有明显缺点,非要挑点骨头那就是,由于可以编写java代码,如使用不当容易破坏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多
性能:velocity应该是最好的,其次是jsp,普通的页面freemarker性能最差,但是在复杂页面上(包含大量判断、日期金额格式化)的页面上,freemarker的性能比使用tag和el的jsp好。
相关推荐
### jsp、freemarker、velocity简介和对比 在Java Web开发领域,模板引擎是连接后端业务逻辑与前端展示层的重要桥梁。本文将重点介绍三种常用的Java Web模板引擎:JSP(Java Server Pages)、Freemarker以及...
在 WebWork2 中,我们可以随意选择使用 Freemarker 或 Velocity 作为 View,模板技术作为 View 的好处是很多,尤其和 JSP 比较起来优点更大。 Velocity 和 Freemarker 都是开源的模板技术,它们都提供了强大的功能...
Velocity与JSP、FreeMarker等其他模板引擎相比,有其独特优势。Velocity的语法简洁,更接近自然语言,且由于它不支持脚本,避免了在模板中引入过多的业务逻辑,使得模板更加纯粹。此外,Velocity的性能也相对较高,...
在Web开发中,三层架构是一种常见的设计模式,它将应用程序分为表现层(Presentation Layer)、业务逻辑层(Business Logic Layer)和数据访问层(Data Access Layer)。这种架构模式有助于提高代码的可维护性、可...
它提供了请求处理、模型绑定、异常处理等功能,并支持多种视图技术,如JSP、Freemarker和Velocity。 2. **Freemarker**: Freemarker是一个模板引擎,用于生成动态HTML或其他文本格式的输出。在本项目中,...
它基于模板来生成文本输出,仅是利用模板加上数据生成文本页面,即是由Java程序准备要显示的数据,由FreeMarker生成页面,通过模板显示准备的数据,并可以在模板中使用JSP标签。 Velocity是一个基于JAVA的模板引擎...
Java的类型检查和垃圾回收机制提高了代码的安全性,而JSP则提供了方便的视图层处理,使得开发者可以专注于业务逻辑而不必过于关注页面展示细节。这种组合使得Java+JSP成为构建大型、复杂网站的理想选择。 1. **Java...
Spring、SpringMVC、Mybatis、Velocity和Maven是Java Web开发中常用的一组技术栈,它们各自在软件开发的不同层面发挥着重要作用。这个压缩包文件的标题和描述表明,它提供了一个集成这些技术的演示项目,下面我们将...
Velocity和FreeMarker是两种常用的Java模板引擎,它们可以方便地结合JSP(JavaServer Pages)进行动态网页生成,并实现页面静态化。本文将详细介绍如何使用Velocity和FreeMarker模板实现页面静态化,并提供具体的...
它支持多种视图技术,如JSP、FreeMarker、Velocity等。 **2. Velocity 概述** Velocity是一个基于Java的模板引擎,它的主要目标是提供一个简洁、高效的模板语言,使开发者可以专注于页面布局和设计,而不用关心底层...
本文将对JSP、Thymeleaf 3、Velocity 1.7、Freemarker 2.3.23等四种主流Java模板引擎的性能进行对比,以帮助开发者选择合适的模板引擎。 JSP模板引擎 JSP(JavaServer Pages)是Java Servlet技术的扩展,用于生成...
Velocity与JSP、FreeMarker等其他模板引擎相比,更注重模板语言的简洁性和安全性。与JSP相比,Velocity不鼓励在模板中编写复杂的Java代码,从而降低了出错的可能性和提高了代码的可读性。 总之,Velocity是一个强大...
Velocity、Freemarker和Thymeleaf都是Java领域的模板引擎,它们各有特点。Freemarker语法更为复杂,但功能更强大;Thymeleaf强调的是XML友好的语法,更适合静态页面的生成。Velocity则以其简洁和易用性受到许多...
实在是不明白FreeMarker比JSP好在什么地方,在java领域,表现层技术主要有三种:jsp、freemarker、velocity。
3. Spring和Java EE的整合: 文档显示了Spring如何与Java EE技术如Servlets和JSP整合,形成了MVC(Model-View-Controller)架构,以实现分离的业务逻辑层、数据访问层和表现层。 4. Hibernate和ORM: Hibernate是一个...
对比其他模板引擎,如Velocity,FreeMarker的优势在于: 1. **更丰富的特性**:FreeMarker支持更多的操作,如数字和日期的算术运算和格式化,国际化处理,以及更复杂的循环和数组处理。 2. **更强大的模板控制**:...
Velocity模板引擎就是这样一种工具,它能够帮助我们自动化地生成MVC架构中的各层代码,从而节省大量手动编写的时间。MVC(Model-View-Controller)是一种广泛应用的设计模式,常用于构建Web应用程序,将业务逻辑、...
5. 模板引擎:尽管JSP本身就是一种模板技术,但为了更好地分离视图和逻辑,可以考虑使用FreeMarker或Velocity等模板引擎来渲染页面。 6. 数据库操作:使用JDBC(Java Database Connectivity)连接数据库,进行CRUD...
### 网站性能优化——Web开发中的JSP与Java技术应用 在现代Web开发领域,网站性能优化是一项至关重要的工作。本篇文章将基于提供的文件信息,深入探讨几个关键的技术点,包括页面静态化、缓存技术、数据源管理、SSI...
【描述】:“CMS(Content Management System,内容管理系统)是一种用于管理网站内容的软件平台,通常采用Java语言与jsp(JavaServer Pages)技术进行开发,以提供高效、灵活的内容发布和管理功能。在Java+jsp的...