velocity作为强大的模板引擎,开源中国使用的就是这个模板引擎。
我采用的velocity版本是1.7,以下未经特殊说明,采用的实例均来自于1.7中所带的实例。
按照官方文档中的例子,来创建一个demo
步骤:
1. 单态模式,初始化模板 例如:Velocity.init().
2. 创建一个Context 对象
3. Context 对象中添加数据.
4. 使用Velocity 选择一个模板.
5. 合并模板和数据导出到输出流.
代码清单1:
import java.io.IOException;
import java.io.StringWriter;
import org.apache.velocity.Template;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.Velocity;
import org.apache.velocity.exception.ParseErrorException;
import org.apache.velocity.exception.ResourceNotFoundException;
public class VelocitySimple {
public static void main(String[] args) throws IOException {
Velocity.init();
VelocityContext context =new VelocityContext();
context.put("name", new String("hello"));
Template template=null;
StringWriter writer=null;
try {
template=Velocity.getTemplate("test.vm","utf-8");
writer =new StringWriter();
template.merge(context, writer);
System.out.println(writer.toString());
} catch (ResourceNotFoundException e) {
e.printStackTrace();
} catch (ParseErrorException e) {
e.printStackTrace();
}finally{
writer.close();
}
}
}
这里对于路径,也搞得我一头雾水,也是各种查找,发现了源码中对于velocity的默认路径加载方式。
重点就是这个类package org.apache.velocity.runtime.resource.loader.StringResourceLoader 他继承自ResourceLoader 类,并重写了里面的抽象方法
public abstract InputStream getResourceStream( String source )
throws ResourceNotFoundException;
通过类加载器获得文件所在路径,即项目所在路径来进行加载。
test.vm路径放在于项目同级的目录下
内容很简单:
#this is a velocity test!
welcome $name!
对于第二种加载方式,通过设定properties文件加载,也有必要了解下,因为是可配置的方式。
代码清单2:
import java.io.IOException;
import java.io.StringWriter;
import java.util.Properties;
import org.apache.velocity.Template;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.Velocity;
import org.apache.velocity.exception.ParseErrorException;
import org.apache.velocity.exception.ResourceNotFoundException;
public class VelocityProperties {
private final static String VC_TEM_BASE_PATH="src/com/linfeng/util/vm";
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
Properties properties =System.getProperties();
properties.setProperty(Velocity.FILE_RESOURCE_LOADER_PATH, VC_TEM_BASE_PATH);
Velocity.init(properties);
VelocityContext context =new VelocityContext();
context.put("name", new String("凭海临风"));
Template template=null;
StringWriter writer=null;
try {
template=Velocity.getTemplate("test.vm","utf-8");
writer =new StringWriter();
template.merge(context, writer);
System.out.println(writer.toString());
} catch (ResourceNotFoundException e) {
e.printStackTrace();
} catch (ParseErrorException e) {
e.printStackTrace();
}finally{
writer.close();
}
}
}
项目截图:
需要的jar包在1.7下载的文件中都包含。
下一步,学习velocity语法。