Apache的速度 - 资源未发现异常 [英] Apache Velocity - Resource not found exception

查看:281
本文介绍了Apache的速度 - 资源未发现异常的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个要求,产生一些自动化的邮件,所以我想用速度这个task.I复制所有速度罐子lib文件夹,并创建了一个hello.vm模板,并放置在WEB-INF /模板文件夹。下面是例外,我得到,

  org.apache.velocity.exception.ResourceNotFoundException:无法找到资源'hello.vm
USERCOUNT递增为:1
    在org.apache.velocity.runtime.resource.ResourceManagerImpl.loadResource(ResourceManagerImpl.java:474)
    在org.apache.velocity.runtime.resource.ResourceManagerImpl.getResource(ResourceManagerImpl.java:352)
    在org.apache.velocity.runtime.RuntimeInstance.getTemplate(RuntimeInstance.java:1533)
    在org.apache.velocity.runtime.RuntimeInstance.getTemplate(RuntimeInstance.java:1514)
    在org.apache.velocity.app.VelocityEngine.getTemplate(VelocityEngine.java:373)
    在indian.test.handleRequest(test.java:34)
    在org.apache.velocity.tools.view.VelocityViewServlet.doRequest(VelocityViewServlet.java:217)
    在org.apache.velocity.tools.view.VelocityViewServlet.doGet(VelocityViewServlet.java:182)
    在javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
    在javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
    在org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
    在org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    在org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)
    在org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
    在org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    在listener.trimresponse.doFilter(trimresponse.java:46)
    在org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
    在org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    在org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:225)
    在org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)
    在org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
    在org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
    在org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
    在org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)
    在org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    在org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
    在org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:999)
    在org.apache.coyote.AbstractProtocol $ AbstractConnectionHandler.process(AbstractProtocol.java:565)
    在org.apache.tomcat.util.net.JIoEndpoint $ SocketProcessor.run(JIoEndpoint.java:307)
    在java.util.concurrent.ThreadPoolExecutor中的$ Worker.runTask(ThreadPoolExecutor.java:886)
    在java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(ThreadPoolExecutor.java:908)
    在java.lang.Thread.run(Thread.java:619)

我尝试了所有的其他的方式来加载资源使用的类加载器/ webapps中,仍然错误仍然是same.I正在使用NetBeans 7.2.x和Tomcat 7.27。鸭preciate如果有人能提出一些这一点。

下面是我的速度属性文件,

  resource.loader =文件
file.resource.loader.class = org.apache.velocity.runtime.resource.loader.FileResourceLoader
file.resource.loader.path = C:\\用户\\基兰\\桌面\\ Netbeans的项目\\ ourstory \\网络\\ WEB-INF \\模板
file.resource.loader.cache =真
file.resource.loader.modificationCheckInterval = 2
runtime.log = / WEB-INF /日志/ velocity.log
runtime.log.logsystem.class = org.apache.velocity.runtime.log.Log4JLogSystem
runtime.log.logsystem.log4j.pattern =%d个 - %M%N
runtime.log.logsystem.log4j.file.size = 10000
runtime.log.logsystem.log4j.file.backups = 1

和下面的servlet我使用

 进口java.util.Properties;
进口javax.servlet.http包*。
进口org.apache.velocity.Template;
进口org.apache.velocity.VelocityContext;
进口org.apache.velocity.app.VelocityEngine;
进口org.apache.velocity.context.Context;
进口org.apache.velocity.tools.view.VelocityViewServlet;公共类测试扩展的VelocityViewServlet {
    私人字符串htmlTemplate =hello.vm;    VelocityContext语境=新VelocityContext();    @覆盖
    公共模板的handleRequest(HttpServletRequest的请求,
            HttpServletResponse的响应,
            上下文的背景下){
   //属性道具=新特性();
    // props.setProperty(resource.loader,班);
    // props.setProperty(class.resource.loader.class,org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader);
    // props.setProperty(webapp.resource.loader.path,/ WEB-INF /模板/);        VelocityEngine发动机=新VelocityEngine();
        engine.init();        模板模板= NULL;        尝试{
            context.put(名,速度测试);
                    模板= engine.getTemplate(htmlTemplate);
           }赶上(例外五){
             e.printStackTrace();
            通信System.err.println(捕获到异常:+ e.getMessage());
        }
        返回模板;
    }
}

其简单的servlet,但由于某些原因,我无法得到它的工作。


解决方案

(回答评论和编辑。见<一href=\"http://meta.stackoverflow.com/questions/251597/question-with-no-answers-but-issue-solved-in-the-comments\">Question没有答案,但问题的评论解决)

在OP写道:


  

更新解决了。


  
  

最后浪费了好2天,拉出很多头发,撞及头部多次后,它的resolved.here是我做过什么来解决这个问题,增加夫妻的日志报表,以确保它指向正确的模板文件夹然后考取到模板文件的绝对路径。当心反斜杠和正斜杠。需要登录的文件夹路径,看看到底在哪其寻找,然后保持dubugging。它的屁股痛来解决这样一个简单的东西。


  / *
 *要改变这种模板,选择Tools |模板
 *并打开编辑器的模板。
 * // **
 *
 * @author克兰
 * /
进口的java.io.File;
进口的java.util.Enumeration;
进口java.util.Properties;
进口javax.servlet.http包*。
进口org.apache.velocity.Template;
进口org.apache.velocity.app.VelocityEngine;
进口org.apache.velocity.context.Context;
进口org.apache.velocity.tools.view.VelocityViewServlet;公共类Hellotest扩展的VelocityViewServlet {    @覆盖
    公共模板的handleRequest(HttpServletRequest的请求,
            HttpServletResponse的响应,
            上下文的背景下){
        属性道具=新特性();
  // prop.put(resource.loader,班);
  // prop.put(class.resource.loader.class,org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader);
        字符串absolutePath =新File(Thread.currentThread().getContextClassLoader().getResource(\"\").getFile()).getParentFile().getParentFile().getPath();
        prop.put(file.resource.loader.path,absolutePath +\\\\模板\\\\);
        的System.out.println(绝对路径是:+ absolutePath);
        的System.out.println(键集是:+ prop.keySet());
        枚举EM = prop.keys();
        而(em.hasMoreElements()){
            字符串str =(字符串)em.nextElement();
            的System.out.println(STR +:+ prop.get(STR));
        }
        VelocityEngine速度=新VelocityEngine();
        Velocity.init(丙);
        模板模板= NULL;
        context.put(名,速度测试);
        尝试{
            的System.out.println(绝对路径里面是:+背景);
            模板= Velocity.getTemplate(hello.vm,UTF-8);
        }赶上(例外五){
            e.printStackTrace();
            通信System.err.println(捕获到异常:+ e.getMessage());
        }        返回模板;
    }
}


  

和这里的更新速度属性文件,


  resource.loader =文件
file.resource.loader.class = org.apache.velocity.runtime.resource.loader.FileResourceLoader
file.resource.loader.cache =真
file.resource.loader.modificationCheckInterval = 2


  

最后我把网页模板文件夹下。也许我会尝试在WEB-INF推动这个,看看是怎么回事。它不是好东西,以保持在模板下的网页给予我们正在曝光。


I have a requirement to generate some automated mails and so I wanted to use velocity for this task.I have copied all velocity jars to the lib folder and created a hello.vm template and placed in WEB-INF/templates folder.Below is exception I am getting,

org.apache.velocity.exception.ResourceNotFoundException: Unable to find resource 'hello.vm'
userCount incremented to :1
    at org.apache.velocity.runtime.resource.ResourceManagerImpl.loadResource(ResourceManagerImpl.java:474)
    at org.apache.velocity.runtime.resource.ResourceManagerImpl.getResource(ResourceManagerImpl.java:352)
    at org.apache.velocity.runtime.RuntimeInstance.getTemplate(RuntimeInstance.java:1533)
    at org.apache.velocity.runtime.RuntimeInstance.getTemplate(RuntimeInstance.java:1514)
    at org.apache.velocity.app.VelocityEngine.getTemplate(VelocityEngine.java:373)
    at indian.test.handleRequest(test.java:34)
    at org.apache.velocity.tools.view.VelocityViewServlet.doRequest(VelocityViewServlet.java:217)
    at org.apache.velocity.tools.view.VelocityViewServlet.doGet(VelocityViewServlet.java:182)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at listener.trimresponse.doFilter(trimresponse.java:46)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:225)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:999)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:565)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:307)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
    at java.lang.Thread.run(Thread.java:619)

I tried all the other ways to load resource using classloader/webapps and still the error remains the same.I am using netbeans 7.2.x with tomcat 7.27. Appreciate if someone can suggest something for this.

Below is my velocity properties file,

resource.loader = file
file.resource.loader.class = org.apache.velocity.runtime.resource.loader.FileResourceLoader
file.resource.loader.path = C:\Users\kiran\Desktop\Netbeans Projects\ourstory\web\WEB-INF\templates
file.resource.loader.cache = true
file.resource.loader.modificationCheckInterval = 2
runtime.log=/WEB-INF/logs/velocity.log 
runtime.log.logsystem.class=org.apache.velocity.runtime.log.Log4JLogSystem
runtime.log.logsystem.log4j.pattern=%d - %m%n
runtime.log.logsystem.log4j.file.size=10000
runtime.log.logsystem.log4j.file.backups=1

and below is servlet I am using

import java.util.Properties;
import javax.servlet.http.*;
import org.apache.velocity.Template;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.VelocityEngine;
import org.apache.velocity.context.Context;
import org.apache.velocity.tools.view.VelocityViewServlet;

public class test extends VelocityViewServlet {
    private String htmlTemplate = "hello.vm";

    VelocityContext context = new VelocityContext();

    @Override
    public Template handleRequest(HttpServletRequest request,
            HttpServletResponse response,
            Context context) {
   //    Properties props = new Properties();
    //    props.setProperty("resource.loader", "class");
    //    props.setProperty("class.resource.loader.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader");
    //    props.setProperty("webapp.resource.loader.path", "/WEB-INF/templates/");

        VelocityEngine engine = new VelocityEngine();


        engine.init();

        Template template = null;

        try {
            context.put("name", "Velocity Test");           
                    template = engine.getTemplate(htmlTemplate);
           } catch (Exception e) {
             e.printStackTrace();
            System.err.println("Exception caught: " + e.getMessage());
        }
        return template;
    }
}

its simple servlet but for some reason I am unable to get it working.

解决方案

(Answered in comments and edits. See Question with no answers, but issue solved in the comments )

The OP wrote:

Update Solved.

Finally After wasting good 2 days and pulling out lot of hairs,and banging the head many times, its resolved.here is what I did to resolve this, added couple of logging statements to ensure that it points correct to the templates folders and then pasing the absolute path to the template file. Watch out for backslashes and forward slashes. Need to log the folder paths and see where exactly its looking for and then keep dubugging. Its pain in the ass to fix such a simple stuff.

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *
 * @author kiran
 */
import java.io.File;
import java.util.Enumeration;
import java.util.Properties;
import javax.servlet.http.*;
import org.apache.velocity.Template;
import org.apache.velocity.app.VelocityEngine;
import org.apache.velocity.context.Context;
import org.apache.velocity.tools.view.VelocityViewServlet;

public class Hellotest extends VelocityViewServlet {

    @Override
    public Template handleRequest(HttpServletRequest request,
            HttpServletResponse response,
            Context context) {
        Properties prop = new Properties();
  //      prop.put("resource.loader", "class");
  //      prop.put("class.resource.loader.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader");
        String absolutePath = new File(Thread.currentThread().getContextClassLoader().getResource("").getFile()).getParentFile().getParentFile().getPath();
        prop.put("file.resource.loader.path", absolutePath + "\\templates\\");
        System.out.println("absolute path is : " + absolutePath);       
        System.out.println("keyset is : " + prop.keySet()); 
        Enumeration em = prop.keys();
        while (em.hasMoreElements()) {
            String str = (String) em.nextElement();
            System.out.println(str + ": " + prop.get(str));
        }
        VelocityEngine Velocity = new VelocityEngine();
        Velocity.init(prop);
        Template template = null;
        context.put("name", "Velocity Test");
        try {
            System.out.println("absolute path inside is : " + context); 
            template = Velocity.getTemplate("hello.vm","UTF-8");
        } catch (Exception e) {
            e.printStackTrace();
            System.err.println("Exception caught: " + e.getMessage());
        }

        return template;
    }
}

and here is updated velocity properties file,

resource.loader = file
file.resource.loader.class = org.apache.velocity.runtime.resource.loader.FileResourceLoader
file.resource.loader.cache = true
file.resource.loader.modificationCheckInterval = 2

and finally I put the templates under webpages folder. Maybe I will try to push this in web-inf and see how it goes. Its not good thing to keep templates under webpages given that we are exposing it.

这篇关于Apache的速度 - 资源未发现异常的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆