How Velocity Works?
当在一个应用程序或是servlet中使用Velocity 的时候,通常有以下几个步骤:
1.初始化Velocity ,Velocity有两种实例,一个是单例(Singleton )一个是每次运行时一个实例(separate runtime instance)。
2.创造一个上下文环境(Context )对象。
3.往Context 里增加对象。
4.选择一个模板(template)。
5.将模板和对象一起输出。
在代码中使用单例模式,需要用到org.apache.velocity.app.Velocity这个类,通过这个类完成第一步的初始化工作和第四步的获取模板工作。下面是一个实例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | 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这个类。代码类似如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | 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"); |
Recent Comments