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

简介

Velocity是一个基于java的模板引擎(template engine)。它允许任何人仅仅简单的使用模板语言(template language)来引用由java代码定义的对象。Velocity的灵活性是巨大的并且只受限制于你的创造力。记录于VTL的参考资料是一些Velocity元素,它们将共同赋予你必要的强大而灵活的能力使你的网站有良好的网站形象。只要你能更加熟悉Velocity的元素,你将开始释放Velocity的力量。

功能

Velocity的能力远不止web站点开发这个领域,例如,它可以从模板(template)产生SQL和PostScript、XML,它也 可以被当作一个独立工具来产生源代码和报告,或者作为其他系统的集成组件使用。Velocity也可以为Turbine web开发架构提供模板服务(template service)。Velocity+Turbine提供一个模板服务的方式允许一个web应用以一个真正的MVC模型进行开发。

主要概念

Context:“context”概念是Velocity的核心,是一个在系统与部分之间移动数据容器的常用技术。context被认为是Java(程序)层与模板(设计)层间的数据“航母”。作为程序员的你将收集不同类型的对象,无论您的应用程序怎么要求,都可以将它们放入context中。对于设计师,这些对象以及它们的属性和方法,通过模板可以将其调用。通常,程序员将与设计师合作,确定应用程序的数据要求。从某种意义上来说,程序员生产的数据集将成为设计师访问模板的API。因此,在这个开发过程阶段值得投入一些时间和仔细分析。

VTL:Velocity模板语言(Velocity Template Language)将提供最简单、最容易并且最整洁的方式合并页面动态内容。甚至一个web页面开发人员很少或根本没有编程经验应该很快就可以使用VTL包含动态内容的Web网站。VTL使用references来在web site内嵌套动态内容,一个变量就是一种类型的引用。变量是某种类型的引用,它可以指向java代码中的定义,或者从当前 页面内定义的VTL语句得到值。下面是一个VTL语句的例子,它可以被嵌套到HTML代码中。

基本使用

在maven的pom.xml中添加以下依赖:

<dependency>
    <groupId>org.apache.velocity</groupId>
    <artifactId>velocity</artifactId>
    <version>1.7</version>
</dependency>
<dependency>
    <groupId>org.apache.velocity</groupId>
    <artifactId>velocity-tools</artifactId>
    <version>2.0</version>
</dependency>

在应用程序或servlet中使用Velocity时候,一般通过如下步骤:

  1. 对于所有应用,第一步是要初始化Velocity, 一般使用唯一实例模式(Singleton),如
  2. 创建一个Context object.
  3. 将你的数据对象加入到Context 对象中.
  4. 使用Velocity 选择一个模板.
  5. 合并模板和数据导出到输出流。

代码如下:

public class HelloVelocity {
    public HelloVelocity(String templateFile) {
        try {
            Velocity.init(); //初始化Velocity
            VelocityContext context = new VelocityContext(); //创建一个Context对象
            context.put("list", getNames()); //将你的数据对象加入到Context 对象中
            Template template =  null;

            try {
                template = Velocity.getTemplate(templateFile); //选择一个模板
            }
            catch( ResourceNotFoundException rnfe ) {
                System.out.println("HelloVelocity : error : cannot find template " + templateFile );
            }
            catch( ParseErrorException pee ) {
                System.out.println("HelloVelocity : Syntax error in template " + templateFile + ":" + pee );
            }
            BufferedWriter writer = writer = new BufferedWriter(
                new OutputStreamWriter(System.out));

            if ( template != null)
                template.merge(context, writer); //合并模板和数据导出到输出流
            writer.flush();
            writer.close();
        }
        catch( Exception e ) {
            e.printStackTrace();
        }
    }

    public ArrayList getNames() {
        ArrayList list = new ArrayList();

        list.add("ArrayList element 1");
        list.add("ArrayList element 2");
        list.add("ArrayList element 3");
        list.add("ArrayList element 4");

        return list;
    }

    public static void main(String[] args) {
        HelloVelocity t = new HelloVelocity("src/main/resources/hellovelocity.vm");
    }
}

在resources中新建一个hellovelocity.vm文件,代码如下:

#set( $this = "Velocity")

$this is great!

#foreach( $name in $list )
    $name is great!
#end

#set( $condition = true)

#if ($condition)
The condition is true!
#else
The condition is false!
#end

运行程序,在控制台输出如下内容:

Velocity is great!

    ArrayList element 1 is great!
    ArrayList element 2 is great!
    ArrayList element 3 is great!
    ArrayList element 4 is great!


The condition is true!

以上是基本的使用模式,看起来非常简洁!这些都是一般情况下使用Velocity 所必须的步骤. 但你可能不想这样按部就班的编写代码,Velocity 提供了一些工具以更容易的方式在servlet 或应用程序中使用。在这个指南的后面, 我们将讨论在servlet 和普通应用程序中更好的用法.

参考资料:

http://velocity.apache.org/engine/1.7/user-guide.html

http://velocity.apache.org/engine/1.7/developer-guide.html

相关内容推荐