Velocity简介

转载 2007年09月12日 17:03:00

转自http://www.52blog.net/user1/34503/archives/2005/326868.shtml

1.Velocity的使用

  Velocity是一个开放源吗的模版引擎,由apache.org小组负责开发,现在最新的版本是Velocity1.3.1,http://jakarta.apache.org/velocity/index.html可以了解Velocity的最新信息。

  Velocity允许我们在模版中设定变量,然后在运行时,动态的将数据插入到模版中,替换这些变量。

  例如:

  <html>

  <body>HELLO$CUSTOMERNAME</body>

  </html>

  我们可以在运行时得到客户的名字,然后把它插入到这个模版中替换变量$CUSTOMERNAME,整个替换过程是由Velocity进行控制的,而且java的调用代码也非常简单,如我们可以在java代码中这样调用

  /***********************************************************/

  //这个文件中设定了Velocity使用的log4j的配置和Velocity的模版文件所在的目录

  Velocity.init("D://Template//resource//jt.properties");

  //模版文件名,模版文件所在的路径在上一条语句中已经设置了

  Templatetemplate=Velocity.getTemplate("hello.vm","gb2312");

  //实例化一个Context

  VelocityContextcontext=newVelocityContext();

  //把模版变量的值设置到context中

  context.put("CUSTOMERNAME","MyFirstTemplateEngine----Velocity.");

  //开始模版的替换

  template.merge(context,writer);

  //写到文件中

  PrintWriterfilewriter=newPrintWriter(newFileOutputStream(outpath),true);

  filewriter.println(writer.toString());

  filewriter.close();

  /***********************************************************/

  这就是整个java的代码,非常的简单。如果我们有多个模版变量,我们仅需要把这些模版变量的值设置到context中。

  下面我们简单的分析一下,Velocity引擎读取模板文件时,它直接输出文件中所有的文本,但以$字符开头的除外,$符号标识着一个模版变量位置,

  context.put("CUSTOMERNAME","MyFirstTemplateEngine----Velocity.");

  当Velocity模板引擎解析并输出模板的结果时,模板中所有出现$CUSTOMERNAME的地方都将插入客户的名字,即被加入到VelocityContext的对象的toString()方法返回值将替代Velocity变量(模板中以$开头的变量)。

  模板引擎中最强大、使用最频繁的功能之一是它通过内建的映像(Reflection)引擎查找对象信息的能力。这个映像引擎允许用一种方便的Java“.”类似的操作符,提取任意加入到VelocityContext的对象的任何公用方法的值,或对象的任意数据成员。

  映像引擎还带来了另外一个改进:快速引用JavaBean的属性。使用JavaBean属性的时候,我们可以忽略get方法和括号。请看下面这个模板的例子。

  <html>

  <body>

  Name:$Customer.Name()

  Address:$Customer.Address()

  Age:$Customer.Age()

  </body>

  </html>

  java的代码:

  /***********************************************************/

  //设置客户信息

  Customermycustomer=newCustomer();

  mycustomer.setName("Velocity");

  mycustomer.setAddress("jakarta.apache.org/velocity/index.html");

  mycustomer.setAge(2);

  //这个文件中设定了Velocity使用的Log4j的配置和Velocity的模版文件所在的目录Velocity.init("D://Template//resource//jt.properties");

  //模版文件名,模版文件所在的路径在上一条语句中已经设置了

  Templatetemplate=Velocity.getTemplate("hello.vm","gb2312");

  //实例化一个Context

  VelocityContextcontext=newVelocityContext();

  //把模版变量的值设置到context中

  context.put("Customer",mycustomer);

  //开始模版的替换

  template.merge(context,writer);

  //写到文件中

  PrintWriterfilewriter=newPrintWriter(newFileOutputStream(outpath),true);

  filewriter.println(writer.toString());

  filewriter.close();

  输出结果:

  <html>

  <body>

  Name:Velocity

  Address:jakarta.apache.org/velocity/index.html

  Age:2

  </body>

  </html>

  除了替换变量之外,象Velocity高级引擎还能做其他许多事情,它们有用来比较和迭代的内建指令,通过这些指令我们可以完成程序语言中的条件判断语句和循环语句等。

  例如,我们想要输出年龄等于2的所有客户的信息,我们可以这样定义我们的模版

  模版:

  <html>

  <body>

  <table>

  <tr>

  <td>名称</td>

  <td>地址</td>

  <td>年龄</td>

  </tr>

  #foreach($Customerin$allCustomer)

  #if($Customer.Age()=="2")

  <tr>

  <td>$Customer.Name()</td>

  <td>$Customer.Address()</td>

  <td>$Customer.Age()</td>

  </tr>

  #end

  #end

  </table>

  </body>

  </html>

  java的代码:

  /******************************************************/

  //设置客户信息

  ArrayListallMyCustomer=newArrayList();

  //客户1

  Customermycustomer1=newCustomer();

  mycustomer1.setName("Velocity");

  mycustomer1.setAddress("jakarta.apache.org/velocity/index.html");

  mycustomer1.setAge(2);

  //客户2

  Customermycustomer2=newCustomer();

  mycustomer2.setName("Tomcat");

  mycustomer2.setAddress("jakarta.apache.org/tomcat/index.html");

  mycustomer2.setAge(3);

  //客户3

  Customermycustomer3=newCustomer();

  mycustomer3.setName("Log4J");

  mycustomer3.setAddress("jakarta.apache.org/log4j/docs/index.html");

  mycustomer3.setAge(2);

  //添加到allMyCustomer(ArrayList)中.

  allMyCustomer.add(mycustomer1);

  allMyCustomer.add(mycustomer2);

  allMyCustomer.add(mycustomer3);

  //这个文件中设定了Velocity使用的log4j的配置和Velocity的模版文件所在的目

  Velocity.init("D://Template//resource//jt.properties");

  //模版文件名,模版文件所在的路径在上一条语句中已经设置了

  Templatetemplate=Velocity.getTemplate("hello.vm","gb2312");

  //实例化一个Context

  VelocityContextcontext=newVelocityContext();

  /**注意这里我们仅仅需要给一个模版变量负值*/

  context.put("allCustomer",allMyCustomer);

  //开始模版的替换

  template.merge(context,writer);

  //写到文件中

  PrintWriterfilewriter=newPrintWriter(newFileOutputStream(outpath),true);

  filewriter.println(writer.toString());

  filewriter.close();

  /******************************************************/

  结果:

  <html>

  <body>

  <table>

  <tr>

  <td>名称</td>

  <td>地址</td>

  <td>年龄</td>

  </tr>

  <tr>

  <td>Velocity</td>

  <td>jakarta.apache.org/velocity/index.html</td>

  <td>2</td>

  </tr>

  <tr>

  <td>Log4J</td>

  <td>jakarta.apache.org/log4j/docs/index.html</td>

  <td>2</td>

  </tr>

  </table>

  </body>

  </html>

  #if语句完成逻辑判断,这个我想不用多说了。

  allCustomer对象包含零个或者多个Customer对象。由于ArrayList(List,HashMap,HashTable,Iterator,Vector等)属于JavaCollectionsFramework的一部分,我们可以用#foreach指令迭代其内容。我们不用担心如何定型对象的类型——映像引擎会为我们完成这个任务。#foreach指令的一般格式是“#foreachin”。#foreach指令迭代list,把list中的每个元素放入item参数,然后解析#foreach块内的内容。对于list内的每个元素,#foreach块的内容都会重复解析一次。从效果上看,它相当于告诉模板引擎说:“把list中的每一个元素依次放入item变量,每次放入一个元素,输出一次#foreach块的内容”。

  2.MVC设计模型

  使用模板引擎最大的好处在于,它分离了代码(或程序逻辑)和表现(输出)。由于这种分离,你可以修改程序逻辑而不必担心邮件消息本身;类似地,你(或公关部门的职员)可以在不重新编译程序的情况下,重新编写客户列表。实际上,我们分离了系统的数据模式(DataModel,即提供数据的类)、控制器(Controller,即客户列表程序)以及视图(View,即模板)。这种三层体系称为Model-View-Controller模型(MVC)。

  如果遵从MVC模型,代码分成三个截然不同的层,简化了软件开发过程中所有相关人员的工作。

  结合模板引擎使用的数据模式可以是任何Java对象,最好是使用JavaCollectionFramework的对象。控制器只要了解模板的环境(如VelocityContext),一般这种环境都很容易使用。

  一些关系数据库的“对象-关系”映射工具能够和模板引擎很好地协同,简化JDBC操作;对于EJB,情形也类似。模板引擎与MVC中视图这一部分的关系更为密切。模板语言的功能很丰富、强大,足以处理所有必需的视图功能,同时它往往很简单,不熟悉编程的人也可以使用它。模板语言不仅使得设计者从过于复杂的编程环境中解脱出来,而且它保护了系统,避免了有意或无意带来危险的代码。例如,模板的编写者不可能编写出导致无限循环的代码,或侵占大量内存的代码。不要轻估这些安全机制的价值;大多数模板编写者不懂得编程,从长远来看,避免他们接触复杂的编程环境相当于节省了你自己的时间。许多模板引擎的用户相信,在采用模板引擎的方案中,控制器部分和视图部分的明确分离,再加上模板引擎固有的安全机制,使得模板引擎足以成为其他内容发布系统(比如JSP)的替代方案。因此,Java模板引擎最常见的用途是替代JSP也就不足为奇了。

  3.HTML处理

  由于人们总是看重模板引擎用来替换JSP的作用,有时他们会忘记模板还有更广泛的用途。到目前为止,模板引擎最常见的用途是处理HTMLWeb内容。但我还用模板引擎生成过SQL、email、XML甚至Java源代码。
 

相关文章推荐

velocity入门简介

  • 2014年01月02日 14:05
  • 182KB
  • 下载

Velocity语法简介.doc

  • 2011年07月14日 15:31
  • 88KB
  • 下载

velocity的使用简介

Velocity 是一个基于 Java 的模板引擎,它允许任何人仅仅简单的使用模板语言来引用由 Java 代码定义的对象,从而实现界面和 Java 代码的分离,使得界面设计人员可以和 Java 程...

【模板引擎】Velocity教程(一)简介

简介 Velocity是一个基于java的模板引擎(template engine)。它允许任何人仅仅简单的使用模板语言(template language)来引用由java代码定义的对象。Ve...

velocity的简介

Velocity是一个基于java的模板引擎(template engine)。它允许任何人仅仅简单的使用模板语言(template language)来引用由java代码定义的对象。 当Veloci...
  • burpee
  • burpee
  • 2016年09月12日 17:43
  • 316

Apache Velocity简介

开发者文档:http://velocity.apache.org/engine/devel/developer-guide.html http://velocity.apache.org/engin...

JSP与Velocity的比较

JSP渲染机制: ServletContext根据path来找到对应的servlet,这个映射在mapper.map方法中完成。通过拓展名".jsp"来找到jspServlet对应的Warpper。...

velocity介绍及语法

Velocity是一个基于java的模板引擎(template engine)。它允许任何人仅仅简单的使用模板语言(template language)来引用由java代码定义的对象。      当V...

SpringMVC同时支持多视图(JSP,Velocity,Freemarker等)的一种思路实现

在基于SpringMVC的项目中有时需要同时使用多种视图格式,如jsp,velocity及freemarker等,通过不同的请求路径配置规则,映射到不同的视图文件。下面我提供一种思路,通过视图模板文件...

浅谈spring框架中集成国际化+velocity

1.在spring配置文件中增加如下配置 classpath:/i18n/messages //资源文件的位置 ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Velocity简介
举报原因:
原因补充:

(最多只允许输入30个字)