在使用velocity过程中,总是出现.ResourceNotFoundException异常,找不到模板.vm文件。现公布解决办法:
研究velocity源码:
关键是
ClassLoader classLoader = super.getClass().getClassLoader();
result = classLoader.getResourceAsStream(name);
这两行代码。是在你的Classpath下去load, 所以必须保证vm文件存在于WEB-INF/classes 下
import org.apache.velocity.app.Velocity; import org.apache.velocity.app.VelocityEngine; import java.io.StringWriter; import java.util.Properties; import org.apache.velocity.Template; import org.apache.velocity.VelocityContext; public class VelocityTest { public static void main(String[] args) { try { /* first, get and initialize an engine */ VelocityEngine ve = new VelocityEngine(); Properties properties = new Properties(); String basePath = "src/com/worthtech/app/test";//这里需要这样写路径!!! // 设置模板的路径 properties.setProperty(Velocity.FILE_RESOURCE_LOADER_PATH, basePath); // 初始花velocity 让设置的路径生效 ve.init(properties); /* next, get the Template */ Template t = ve.getTemplate("vm.vm"); /* create a context and add data */ VelocityContext context = new VelocityContext(); context.put("name", "DingDangXiaoMa"); context.put("site", "http://www.sun.com"); /* now render the template into a StringWriter */ StringWriter writer = new StringWriter(); t.merge(context, writer); /* show the World */ System.out.println(writer.toString()); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
研究velocity源码:
public synchronized InputStream getResourceStream(String name) throws ResourceNotFoundException { InputStream result = null; if ((name == null) || (name.length() == 0)) { throw new ResourceNotFoundException("No template name provided"); } try { ClassLoader classLoader = super.getClass().getClassLoader(); result = classLoader.getResourceAsStream(name); } catch (Exception fnfe) { throw new ResourceNotFoundException(fnfe.getMessage()); } return result; }
关键是
ClassLoader classLoader = super.getClass().getClassLoader();
result = classLoader.getResourceAsStream(name);
这两行代码。是在你的Classpath下去load, 所以必须保证vm文件存在于WEB-INF/classes 下
velocity使用中出现org.apache.velocity.exception.ResourceNotFoundException的解决办法