Velocity技术调查

Velocity技术调查
        模板引擎的设计思想最早由Webmacro提出,并被应用在一个著名的搜索引擎www.altavista.com上。 后来,这种思想渐渐被 Apache 开发小组所采用,并作为一个子项目被提出来,这就是现在的 Velocity
Velocity是什么?
Velocity是一个基于java的模板引擎(template engine)。它允许任何人仅仅简单的使用模板语言(template language)来 引用由java代码定义的对象[dwr似乎也是做这样的工作,不过后者更具体,甚至延伸方法]。
Velocity 应用于 web 开发时,界面设计人员可以和 java 程序开发人员同步开发一个遵循 MVC 架构的 web 站点,也就是说,页面设计人员可以只关注页面的显示效果,而由 java 程序开发人员关注业务逻辑编码。 Velocity java 代码从 web 页面中分离出来放到哪里去?jsp的taglib也做了同样的工作,现在Velocity给我的印象,只是把jsp页面的数据分离出来放到其他地方了?】,这样为 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 模板引擎
简单地说,模板引擎的作用就是取得数据并加以处理,最后显示出数据【而我关心的是mvc分离,如何使用java对象,他这里并没有把Velocity的核心功能,即服务器上的Velocity技术体现出来】。例如,假设有一个企业职工的清单,我们可以用模板引擎将它以 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();
        VelocityContext context = new VelocityContext();
        context.put( "name", new String("Velocity") );
        Template template = null;
        try { 
              template = Velocity.getTemplate("mytemplate.vm");
             } 
       catch( ResourceNotFoundException rnfe )
         { // couldn't find the template } 
            catch( ParseErrorException pee ) 
            { // syntax error : problem parsing the template } catch( MethodInvocationException mie ) 
             { // something invoked in the template // threw an exception } catch( Exception e ) 
             {} 
         StringWriter sw = new StringWriter();
           template.merge( context, sw ); 

Velocity的国际化
               Velocity本身支持模版的国际化编码转换,看看Velocity提供的方法:
Public Template getTemplate (Stirng template, String encoding),
       另外 , Velocity的tools: MessageTool,提供了变量text包含国际化标签,这样只需要简单的编写标签代码即可,如:$text.get(‘title’).
VelocityFramework的支持
1.        Velocity Tools / VelocityViewServlet
Servlet的支持,使用VelocityViewServlet来代替Servlet.
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)