有烟没火 发表于 2009-2-20 11:18:03

Jakarta

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也可以为Turbine web开发架构提供模板服务(template service)。Velocity Turbine提供一个模板服务的方式允许一个web应用以一个真正的MVC模型进行开发。(以上简介内容很贴切,来自互联网)

Velocity是很多模板工具的核心,这是我研究此的目的。

下面给出一个最基本的例子,本例程依赖的核心包:

velocity-1.5.jar
velocity-dep-1.5.jar

开发Velocity的开发流程如下:

一、定义Bean、用来传递参数。



package simple;
/**
* Created by IntelliJ IDEA.<p>
* User: leizhimin<p>
* Date: 2008-8-16 23:46:03<p>
* 普通的JavaBean,用来携带模板参数
*/
public class Person {
    private String name;
    private String sex;
    private int age;

    public Person(String name, String sex, int age) {
      this.name = name;
      this.sex = sex;
      this.age = age;
    }

    public String getName() {
      return name;
    }

    public void setName(String name) {
      this.name = name;
    }

    public String getSex() {
      return sex;
    }

    public void setSex(String sex) {
      this.sex = sex;
    }

    public int getAge() {
      return age;
    }

    public void setAge(int age) {
      this.age = age;
    }
}

二、定义模板

person.vm

<personlist>
    <person>
      <name>$person.name</name>
      <sex>$person.sex</sex>
      <sex>$person.age</sex>
    </person>
</personlist>




三、测试


package simple;

import org.apache.velocity.VelocityContext;

import org.apache.velocity.app.Velocity;

import java.io.*;

/**
* Created by IntelliJ IDEA.<p>
* User: leizhimin<p>
* Date: 2008-8-16 23:37:43<p>
* 通过一个简单的示例演示Velocity的工作原理和流程
*/
public class SimpleTest {
    public static void main(String[] args) throws Exception {
      test();
    }

    public static void test() throws Exception {
      Person p = new Person("zhangsan", "men", 22);

      // 初始化Velocity引擎,init对引擎VelocityEngine配置了一组默认的参数
      // VelocityEngine是单例模式,线程安全
      Velocity.init();

      // 创建一个上下文环境,此实例是非线程安全的
      VelocityContext context = new VelocityContext();
      // 用对象填充context
      context.put("person", p);

      // 通过一个FileReader读取模板文件
      Reader reader = new FileReader(new File("Q:\\_dev_stu\\commons_stu\\velocity\\src\\simple\\person.vm"));

      // 创建一个字符串输出流,模板输出的目标
      StringWriter writer = new StringWriter();
      // 根据模板上下文对模板求值,logMsgName字符串为发生异常时候记录模板异常提供方便
      Velocity.evaluate(context, writer, "logMsgName", reader);
      // 将求值的结果从控制台输出
      System.out.println(writer.toString());
    }
}

运行结果:


<personlist>
    <person>
      <name>zhangsan</name>
      <sex>men</sex>
      <sex>22</sex>
    </person>
</personlist>


Process finished with exit code 0

可以看出,输入内容是按照模板来输出的。

Velocity应用的难点在于其控制语法,下篇会详细讲述。
页: [1]
查看完整版本: Jakarta