Velocity技术调查

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 三层的逻辑结构发生混淆。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值