Just some sharing about java open source and life

How Velocity Works?

日期:2010-03-17 15:21 | 作者:JavaChen | 分类目录:OpenSource
90 views

当在一个应用程序或是servlet中使用Velocity 的时候,通常有以下几个步骤:
1.初始化Velocity ,Velocity有两种实例,一个是单例(Singleton )一个是每次运行时一个实例(separate runtime instance)。
2.创造一个上下文环境(Context )对象。
3.往Context 里增加对象。
4.选择一个模板(template)。
5.将模板和对象一起输出。

在代码中使用单例模式,需要用到org.apache.velocity.app.Velocity这个类,通过这个类完成第一步的初始化工作和第四步的获取模板工作。下面是一个实例:

package com.javachen.velocity;

import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
import org.apache.velocity.Template;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.Velocity;
import org.apache.velocity.exception.MethodInvocationException;
import org.apache.velocity.exception.ParseErrorException;
import org.apache.velocity.exception.ResourceNotFoundException;

public class HelloVelocity {
	public static void main(String[] args)  {
		try {
                        Velocity.setProperty( Velocity.RUNTIME_LOG_LOGSYSTEM, this);
			Velocity.init();
			VelocityContext context = new VelocityContext();
			context.put("name", "javachen");
			BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(
					System.out));
			Template template = Velocity.getTemplate("src/com/javachen/velocity/hello.vm");
			template.merge(context, writer);
			writer.flush();
			writer.close();
		} catch (ResourceNotFoundException e) {
			e.printStackTrace();
		} catch (ParseErrorException e) {
			e.printStackTrace();
		} catch (MethodInvocationException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

hello.vm如下:
Hello, $name

过程是这样的:初始化 – 获取context – context 输出对像给值 – 获取模板文件 – 写模板文件 – 关闭资源 .

这只是Velocity的基本用法,现在通过一些工具jar包,可以封装这些操作,使Velocity的操作变得更加简单。

上面是Velocity单例实例,还有一个Separate Instance(单个实例)实例,可以在同一个JVM中配置并使用多个Velocity实例。为了获得Separate Instance,必须使用org.apache.velocity.app.VelocityEngine这个类。代码类似如下:

import org.apache.velocity.app.VelocityEngine;
import org.apache.velocity.Template;
...
/*
 *  create a new instance of the engine
 */
VelocityEngine ve = new VelocityEngine();
/*
 *  configure the engine.  In this case, we are using
 *  ourselves as a logger (see logging examples..)
 */
ve.setProperty(
    VelocityEngine.RUNTIME_LOG_LOGSYSTEM, this);

/*
 *  initialize the engine
 */
ve.init();
...
Template t = ve.getTemplate("foo.vm");
作者:JavaChen | 分类目录:OpenSource | 标签:
回到顶部

无觅相关文章插件,快速提升流量