velocity使用中出现org.apache.velocity.exception.ResourceNotFoundException的解决办法

来源:互联网 发布:python telnet expect 编辑:程序博客网 时间:2024/06/05 23:06
在使用velocity过程中,总是出现.ResourceNotFoundException异常,找不到模板.vm文件。现公布解决办法:
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 blocke.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 下
  • 大小: 52.3 KB
  • 查看图片附件
0 0
原创粉丝点击