Velocity学习1之单实例多实例

由于项目IBR的前台要用到Velocity模板,所以……come on  


按照以往的套路来:

1 下载jar   http://velocity.apache.org/download.cgi

目录及文件说明:
 Velocity-X.jar 完整的velocity jar 包一般命名格式为velocity-X.jar,其中X 是当前版本号。
 SRC:完整的源文件代码目录
 Examples. 完整的aplication 或web App 例子。
 docs :Veocity 文档目录
 build: 使用ant 编译源码时所需的lib.
. OK,现在就可以开始使用了.请将Velocity-x.jar 放到你的classpath 中或webapp 的lib 下。

2 大体介绍

Velocity 是一处基于java 语言的模板引擎, 使用这个简单、功能强大的开发工具,可以很容易的将数据对象灵活的与格式化文档组装到一起;希望本文能指引使用velocity 在开发基于servlet 或一般java 应用程序的应用上快速起步。


3 它是如何工作的?

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

先来看个例子:

例子1

myTemplate.vm文件:

hello $name

将这个文件放在项目根目录下下:


代码:

public class Single {
	public static void main(String[] args) throws Exception {
		Velocity.init();
		VelocityContext ctx = new VelocityContext();
		ctx.put("name", new String("world"));
		
		Template tem = null;
		tem = Velocity.getTemplate("myTemplate.vm");
		StringWriter writer = new StringWriter();
		tem.merge(ctx, writer);
		
		
		System.out.println(writer.toString());
		        /* 输出流输出到文件*/
		PrintWriter filewriter = new PrintWriter(new FileOutputStream("E:/i.html"), true); 
		        filewriter.print(writer.toString());
		        filewriter.close();
	}
}

这样在e盘下面会生成i.html文件,文件的内容为:

hello world

因为$name已经被world所替代!

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


4.单实例还是多实例

(1).Singleton Model
这是系统默认的模式, 这样在jvm(应用程序)或web aplication(一个web 程序)中只存在一个Velocityengine 实例共享使用。. 这对于配置和共享资源来说非常方便. 比如, 这非常适合用于支持Servlet2.2+ 的web application 中,每一个web app 持有它自己的唯一Velocity 实例, 它们可以共享templates, a logger 等资源. Singleton 可以直接通过使用org.apache.velocity.app.Velocity 类,
如下例子:

Velocity.setProperty( Velocity.RUNTIME_LOG_LOGSYSTEM, this);
Velocity.init();
Template t = Velocity.getTemplate("foo.vm");


(2).Separate Instance
在1.2 版本以后, 可以在JVM (or web application.)创建,配置,使用多个Velocity 实例;当你希望在同一程序中,对每个实例独立配置时它们的template directories, loggers 等资源时,这是非常方便的. 多实例化时,我们要用到org.apache.velocity.app.VelocityEngine 类. 下面是一个例子,请注意和上面singleton example 同法时的不同:

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");


可以看到,这是非常简单的直接使用就行了.无论用singleton 或separate instances 都不需要改变你程序的上层结构及模板内容.


对于开发人员而言, 你应在以下两个类中二者择一的使用
org.apache.velocity.app.Velocity 应用于singleton model,
org.apache.velocity.app.VelocityEngine 一般用于non-singleton model ('separate instance').


继续下一篇。。。。



你可能感兴趣的:(Velocity学习1之单实例多实例)