velocity使用基本來說比較簡單,但在加載模板時老出問題,很多初學者經常會遇到找不到模板這種異常。本文就針對目前常用的三種模板加載方式做以說明。
velocity官方幫助文檔
其工程目錄結構大致為
點我下載示例代碼

一、velocity默認的加載方式(文件加載方式)
package com.velocity.test;
import java.io.StringWriter;
import java.util.Properties;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.VelocityEngine;
/**
* 從文件中加載模板文件,即velocity默認的模板文件加載方式
* @author welcome
*
*/
public class LoaderFromFile {
public static void main(String[] args) throws Exception{
//初始化參數
Properties properties=new Properties();
//設置velocity資源加載方式為file
properties.setProperty("resource.loader", "file");
//設置velocity資源加載方式為file時的處理類
properties.setProperty("file.resource.loader.class", "org.apache.velocity.runtime.resource.loader.FileResourceLoader");
//實例化一個VelocityEngine對象
VelocityEngine velocityEngine=new VelocityEngine(properties);
//實例化一個VelocityContext
VelocityContext context=new VelocityContext();
//向VelocityContext中放入鍵值
context.put("username", "張三");
context.put("password", "123456789");
context.put("age", "20");
context.put("address", "陜西西安");
context.put("blog", "http://blogjava.net/sxyx2008");
//實例化一個StringWriter
StringWriter writer=new StringWriter();
//從vm目錄下加載hello.vm模板,在eclipse工程中該vm目錄與src目錄平級
velocityEngine.mergeTemplate("vm/hello.vm", "gbk", context, writer);
System.out.println(writer.toString());
}
}
二、從類路徑加載模板文件
package com.velocity.test;
import java.io.StringWriter;
import java.util.Properties;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.VelocityEngine;
/**
* 從class(類路徑)中加載模板文件
* @author welcome
*
*/
public class LoaderFromClass {
public static void main(String[] args) throws Exception{
//初始化參數
Properties properties=new Properties();
//設置velocity資源加載方式為class
properties.setProperty("resource.loader", "class");
//設置velocity資源加載方式為file時的處理類
properties.setProperty("class.resource.loader.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader");
//實例化一個VelocityEngine對象
VelocityEngine velocityEngine=new VelocityEngine(properties);
//實例化一個VelocityContext
VelocityContext context=new VelocityContext();
//向VelocityContext中放入鍵值
context.put("username", "張三");
context.put("password", "123456789");
context.put("age", "20");
context.put("address", "陜西西安");
context.put("blog", "http://blogjava.net/sxyx2008");
//實例化一個StringWriter
StringWriter writer=new StringWriter();
//從src目錄下加載hello.vm模板
//假若在com.velocity.test包下有一個hello.vm文件,那么加載路徑為com/velocity/test/hello.vm
velocityEngine.mergeTemplate("com/velocity/test/hello.vm", "gbk", context, writer);
//velocityEngine.mergeTemplate("hello.vm", "gbk", context, writer);
System.out.println(writer.toString());
}
}
三、從jar文件中加載模板文件
package com.velocity.test;
import java.io.StringWriter;
import java.util.Properties;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.VelocityEngine;
/**
* 從jar文件中加載模板文件
* @author welcome
*
*/
public class LoaderFromJar {
public static void main(String[] args) throws Exception{
//初始化參數
Properties properties=new Properties();
//設置velocity資源加載方式為jar
properties.setProperty("resource.loader", "jar");
//設置velocity資源加載方式為file時的處理類
properties.setProperty("jar.resource.loader.class", "org.apache.velocity.runtime.resource.loader.JarResourceLoader");
//設置jar包所在的位置
properties.setProperty("jar.resource.loader.path", "jar:file:WebRoot/WEB-INF/lib/vm.jar");
//實例化一個VelocityEngine對象
VelocityEngine velocityEngine=new VelocityEngine(properties);
//實例化一個VelocityContext
VelocityContext context=new VelocityContext();
//向VelocityContext中放入鍵值
context.put("username", "張三");
context.put("password", "123456789");
context.put("age", "20");
context.put("address", "陜西西安");
context.put("blog", "http://blogjava.net/sxyx2008");
//實例化一個StringWriter
StringWriter writer=new StringWriter();
//從/WebRoot/WEB-INF/lib/vm.jar中加載hello.vm模板 vm.jar的目錄結構為vm/hello.vm
velocityEngine.mergeTemplate("vm/hello.vm", "gbk", context, writer);
System.out.println(writer.toString());
}
}
請讀者朋友自行運行程序。
點我下載示例代碼