Velocity技术调查
模板引擎的设计思想最早由Webmacro提出,并被应用在一个著名的搜索引擎www.altavista.com上。
后来,这种思想渐渐被
Apache
开发小组所采用,并作为一个子项目被提出来,这就是现在的
Velocity
。
Velocity是什么?
Velocity是一个基于java的模板引擎(template engine)。它允许任何人仅仅简单的使用模板语言(template language)来引用由java代码定义的对象。
当
Velocity
应用于
web
开发时,界面设计人员可以和
java
程序开发人员同步开发一个遵循
MVC
架构的
web
站点,也就是说,页面设计人员可以只关注页面的显示效果,而由
java
程序开发人员关注业务逻辑编码。
Velocity
将
java
代码从
web
页面中分离出来,这样为
web
站点的长期维护提供了便利,同时也为我们在
JSP
和
PHP
之外又提供了一种可选的方案。
Velocity
的能力远不止
web
站点开发这个领域,例如,它可以从模板(
template
)产生
SQL
和
PostScript
、
XML
,它也可以被当作一个独立工具来产生源代码和报告,或者作为其他系统的集成组件使用。
Velocity
能为我们作什么?
你可能因为下面几种原因而使用
Velocity:
1:
它很容易集成在各种各样的程序领域中。
2:
它为网页制作人员提供了一种清晰而又简单的语法
3:
因为模板和代码是分离的,所以你可以分别独立的开发和维护它们。
4:Velocity
引擎可以很容易的集成到一些
Java
运行环境,特别是
Servlet
.
5:Velocity
使得模板可以访问任何环境对象中的共有方法。
Velocity
的强大之处在于它严格的区分程序开发功能的职责划分。 它限制模板可能访问的对象(也就是后台程序允许它得到的对象)来实现这一点。这意味着,网页设计人员可以只把精力放在数据的显示部分(
View
视图)而程序员则只要关注如何写好程序的控制层(
Controller,
控制器)和商业逻辑和数据管理(模型
Model
)
,
这就是
MVC
开发模式。
MVC
现在已经是广泛接受的一种开发模式,它简化了开发和日益复杂的应用和维护工作。
例如
:
假设你是一家专门出售
Mud
的在线商店的页面设计人员,让我们暂且称它为“在线
MUD
商店”。你们的业务很旺,客户下了各种类型和数量的
mud
订单。他们都是通过输入用户名和密码后才登陆到你的网站,登陆后就允许他们查看订单并购买更多的
mud
。现在,一种非常流行的
mud
正在打折销售。另外有一些客户规律性的购买另外一种也在打折但是不是很流行的
Bright Red Mud
,由于购买的人并不多所以它被安置在页面的边缘。所有用户的信息都是被跟踪并存放于数据库中的,所以某天有一个问题可能会冒出来:为什么不使用
velocity
来使用户更好的浏览他们感兴趣的商品呢?
Velocity
使得
web
页面的客户化工作非常容易。
Velocity
的工作流程和原理
Velocity
是一个源代码开放的
Java
模板引擎
简单地说,模板引擎的作用就是取得数据并加以处理,最后显示出数据。例如,假设有一个企业职工的清单,我们可以用模板引擎将它以
HTML
页面的形式显示在企业的
Intranet
上,或简化后显示在管理员的手机上。使用模板引擎的好处就在于开发者和设计者能够以最合适的方式操作和利用数据,
Velocity
就是一个模板引擎的绝佳范例。
Velocity
的英文含义是“速度、流通速度、速率;迅速,快速”,也许它的作者希望
Velocity
能够提高人们开发
Web
应用的速度吧。
当
Velocity
应用于一个
application program
或
a servlet
,
你通常将做下面的事情
1.
初始化
Velocity
.
2.
创建
Context
对象
3.
添加数据到
Context
4.
选择模板
5.
合并模板和你的数据产生输出页面
In
code
Using
the singleton pattern via the
org.apache.velocity.app.Velocity class, this looks like
import
java.io.StringWriter;
import
org.apache.velocity.VelocityContext;
import
org.apache.velocity.Template;
import
org.apache.velocity.app.Velocity;
import
org.apache.velocity.exception.ResourceNotFoundException;
import
org.apache.velocity.exception.ParseErrorException;
import
org.apache.velocity.exception.MethodInvocationException;
Velocity.init();
VelocityContextcontext
=
new
VelocityContext();
context.put(
"
name
"
,
new
String(
"
Velocity
"
));
Templatetemplate
=
null
;
try
...
{
template=Velocity.getTemplate("mytemplate.vm");
}
catch
(ResourceNotFoundExceptionrnfe)
...
{//couldn'tfindthetemplate}
catch(ParseErrorExceptionpee)
...{//syntaxerror:problemparsingthetemplate}catch(MethodInvocationExceptionmie)
...{//somethinginvokedinthetemplate//threwanexception}catch(Exceptione)
...{}
StringWritersw=newStringWriter();
template.merge(context,sw);
Velocity
的国际化
Velocity本身支持模版的国际化编码转换,看看Velocity提供的方法:
Public Template getTemplate (Stirng template, String encoding),
另外
,
在
Velocity的tools: MessageTool,提供了变量text包含国际化标签,这样只需要简单的编写标签代码即可,如:$text.get(‘title’).
Velocity
对
Framework
的支持
1.
Velocity Tools / VelocityViewServlet
对
Servlet
的支持
,
使用
VelocityViewServlet
来代替
S
ervlet
.
2.
Velocity Tools / VelocityStruts
对
Struts
的支持
.
3.
Third party frameworks
对第三方框架的支持
,
比如
:
Spring,Turbine
等
.
Velocity
的优点和
缺点
充分体现MVC的核心思想,即:功能模块化。
将
HTML
技术和复杂的业务逻辑拆分
.Velocity
的优点就在于其简单的模板语法以及成功实现对内容和显示方式的分离。有了
Velocity
,开发者可以专注于程序代码,设计者可以专注于页面的布局和视觉效果,不必再担心要在模板中嵌入各种程序代码。与传统的用
JSP
和
PHP
构造页面的方式相比,这显然是一大进步。在传统的
JSP
、
PHP
页面中,程序逻辑嵌入到
Web
页面中,从而为理解和维护
Web
页面带来很大的麻烦。
Velocity
模板引擎成功地解决了这一问题。
Velocity的主要缺点是在于异常处理以及日志上。
Velocity总结
:
Velocity 解决了如何在 Servlet 和 网页之间传递数据的问题,当然这种传输数据的机制是在 MVC 模式上进行的,也就是View 和 Modle , Controller 之间相互独立工作,一方的修改不影响其他方变动,他们之间是通过环境变量(Context)来实现的,当然双方网页制作一方和后台程序一方要相互约定好对所传递变量的命名约定,比如上个程序例子中的 site, name 变量,它们在网页上就是 $name ,$site 。
这样只要双方约定好了变量名字,那么双方就可以独立工作了。无论页面如何变化,只要变量名不变,那么后台程序就无需改动,前台网页也可以任意由网页制作人员修改。这就是
Velocity
的工作原理。
你会发现简单变量名通常无法满足网页制作显示数据的需要,比如我们经常会循环显示一些数据集,或者是根据一些数据的值来决定如何显示下一步的数据,
Velocity
同样提供了循环,判断的简单语法以满足网页制作的需要。
Velocity
提供了一个简单的模板语言以供前端网页制作人员使用,这个模板语言足够简单(大部分懂得
javascript
的人就可以很快掌握,其实它比
javascript
要简单的多),当然这种简单是刻意的,因为它不需要它什么都能做,
View
层其实不应该包含更多的逻辑,
Velocity
的简单模板语法可以满足你所有对页面显示逻辑的需要,这通常已经足够了,这里不会发生象
jsp
那样因为一个无限循环语句而毁掉系统的情况,
jsp
能做很多事情,
Sun
在制定
Jsp 1.0
标准的时候,没有及时的限定程序员在
jsp
插入代码逻辑,使得早期的
jsp
代码更象是
php
代码,它虽然强大,但是对显示层逻辑来说,并不必要,而且会使
MVC
三层的逻辑结构发生混淆。
Velocity模板引擎解析
774

被折叠的 条评论
为什么被折叠?



