gundumw100 2010-06-30 10:11 采纳率: 0%
浏览 499
已采纳

使用velocity的路径问题

总是报org.apache.velocity.exception.ResourceNotFoundException: Unable to find resource 'simple.vm'
我真见鬼了。我总觉得velocity找模板的路径很蹊跷
请知道的大哥指点一下啊
[code="java"]
public static void exportFile(){
VelocityEngine ve=new VelocityEngine();
Properties p = new Properties();
p.setProperty("resource.loader", "classes");//这里对不对?
p.setProperty("class.resource.loader.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader");//这里对不对?
p.setProperty(Velocity.OUTPUT_ENCODING, "UTF-8");

p.setProperty(Velocity.INPUT_ENCODING, "UTF-8");
try {
ve.init(p);
Template t=ve.getTemplate("simple.vm","utf-8");

        VelocityContext context = new VelocityContext(); 
        context.put("name", "张三李四王五");
        context.put("project", "Jakarta");

        PrintWriter writer = new PrintWriter("D:\\test.html","UTF-8");
        t.merge(context, writer);
        System.out.println(writer.toString());
        writer.flush();
        writer.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

[/code]
以上代码需要找到模板输出一个html文件,可是一直找不到模板,怎么回事?下图是我的路径,可以看到在WebRoot下有个vm文件夹,
在WEB-INF下也有个vm文件夹,还有在tomcat的Tomcat 5.5\webapps\myProject\WEB-INF\classes\vm\simple.vm也有一个vm文件夹,可就是报错,不管你写在哪里!!!怎么回事啊?谢谢大哥们了

[img]http://dl.iteye.com/upload/attachment/270641/5e116fd3-9824-3b41-85cc-e148ae21d85e.png[/img]

  • 写回答

2条回答 默认 最新

  • Rambing 2010-06-30 15:07
    关注

    [code="java"]
    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;
    

    }

    [/code]

    打开了源代码粗粗看了下ClasspathResourceLoader中的代码。 自己看代码关键是
    ClassLoader classLoader = super.getClass().getClassLoader();
    result = classLoader.getResourceAsStream(name);

    这两行代码。是在你的Classpath下去load, 所以必须保证vm文件存在于WEB-INF/classes 下

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算
  • ¥15 java如何提取出pdf里的文字?