Java Velocity问题-与Spring MVC一起使用时ResourceNotFoundException

Java Velocity问题-与Spring MVC一起使用时ResourceNotFoundException,java,spring,velocity,Java,Spring,Velocity,我将SpringMVC用于我的web应用程序,并集成Velocity用于模板化我的电子邮件 当它试图发送我的电子邮件时,我收到以下500个错误 org.apache.velocity.exception.ResourceNotFoundException: Unable to find resource '/WEB-INF/velocity/registrationEmail.vm' 我知道这意味着什么,我需要做什么,但我知道我一定是做错了什么,我不明白为什么它找不到我的.vm文件 我已经在

我将SpringMVC用于我的web应用程序,并集成Velocity用于模板化我的电子邮件

当它试图发送我的电子邮件时,我收到以下500个错误

org.apache.velocity.exception.ResourceNotFoundException: 
Unable to find resource '/WEB-INF/velocity/registrationEmail.vm'
我知道这意味着什么,我需要做什么,但我知道我一定是做错了什么,我不明白为什么它找不到我的.vm文件

我已经在applicationContext.xml文件中配置了velocity,如下所示,但我相信我可能遗漏了velocity查找该文件所需的必要属性

<bean id="velocityEngine" 
    class="org.springframework.ui.velocity.VelocityEngineFactoryBean">
        <property name="velocityProperties">
             <value>
              resource.loader=class
               class.resource.loader.class=
               org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader
             </value>
        </property>
    </bean>
    <bean id="velocityConfig" class="org.springframework.web.servlet.view.velocity.VelocityConfigurer">
     <property name="resourceLoaderPath" value="/WEB-INF/velocity/"/>
    </bean>

resource.loader=class
class.resource.loader.class=
org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader
我相信这可能是我需要做一些更改/添加的地方,但我不确定

我的模板文件的路径是WEB-INF/velocity/templateName.vm

在我的控制器中使用VelocityEngineBean时,我指定了这一点,如下所示

String text = VelocityEngineUtils.mergeTemplateIntoString( velocityEngine, "/WEB-INF/velocity/registrationEmail.vm", test); String text=VelocityEngineUtils.mergeTemplateIntoString( velocityEngine,“/WEB-INF/velocity/registrationEmail.vm”,测试);
在build.xml文件中是否需要执行某些操作以确保它能够找到我的模板文件?

我遇到了类似的问题,根本原因是使用了绝对路径。因此,请不要使用前导的
“/”

String text = VelocityEngineUtils.mergeTemplateIntoString(
        velocityEngine, "WEB-INF/velocity/registrationEmail.vm", test);

我也遇到过类似的问题,根本原因是使用绝对路径。因此,请不要使用前导的
“/”

String text = VelocityEngineUtils.mergeTemplateIntoString(
        velocityEngine, "WEB-INF/velocity/registrationEmail.vm", test);

我认为问题在于WEB-INF不是类路径的一部分。您不能期望
ClasspathResourceLoader
找到不在类路径中的内容

WEB-INF/classes和WEB-INF/lib中的所有JAR都在类路径中。尝试将包含.vm文件的文件夹移动到WEB-INF/classes下,看看是否有帮助

最好的办法是遵循Spring文档:


我认为问题在于WEB-INF不是类路径的一部分。您不能期望
ClasspathResourceLoader
找到不在类路径中的内容

WEB-INF/classes和WEB-INF/lib中的所有JAR都在类路径中。尝试将包含.vm文件的文件夹移动到WEB-INF/classes下,看看是否有帮助

最好的办法是遵循Spring文档:


这很痛苦。如果你把它放在类路径中,那么开发就成了地狱,因为每次你修改velocity模板时,servlet容器都会重新加载webapp

我建议使用org.apache.velocity.tools.view.WebappResourceLoader,它不要求文件位于类路径中,并且允许您执行相对包含,从而使开发更加容易


你也可以查看我的帖子:

这很痛苦。如果你把它放在类路径中,那么开发就成了地狱,因为每次你修改velocity模板时,servlet容器都会重新加载webapp

我建议使用org.apache.velocity.tools.view.WebappResourceLoader,它不要求文件位于类路径中,并且允许您执行相对包含,从而使开发更加容易


您也可以查看我的帖子:

假设您将*.vm文件归档到*.jar文件中。并将其放入WEB-INF/lib中

然后在bean配置中包含以下代码段,使其对VelocityEngineUtils可见

好好工作吧



类路径:com/test/mail


您可以给出
..
块之间的每个资源位置(即,应该在类路径中)的内容。

假设您将*.vm文件归档到*.jar文件中。并将其放入WEB-INF/lib中

然后在bean配置中包含以下代码段,使其对VelocityEngineUtils可见

好好工作吧



类路径:com/test/mail


您可以给出
块之间的每个资源位置(即,应该在类路径中)的内容。

我尝试了这个,但仍然找不到.vm文件,我想知道我的错误可能在哪里…我尝试了这个,但仍然找不到.vm文件,我想知道我的错误在哪里…我试着把我的/velocity目录放在/WEB-INF/classes/velocity下,但它仍然给了我同样的问题。有没有更好的方法来实现这一点或指定速度特性?您给出了什么路径?应该是“velocity/*.vm”。如果是在WEB-INF/classes中,您不需要前缀。很好,这很有效,我很好奇,这是一种正确的方法吗(将velocity模板保存在classes目录中)?我在这个话题上没有看到太多,但我从多个渠道听到了相同的做法。当然,为什么不可以呢?您只需将模板放在类路径中,资源加载程序可以在其中找到它们。你担心的潜在问题是什么?我不担心任何问题,我只是没有太多的经验,也没有把任何东西都放在类目录中,但它工作得很好,我感谢你的帮助!我尝试将/velocity目录放在/WEB-INF/classes/velocity下,但它仍然给了我同样的问题。有没有更好的方法来实现这一点或指定速度特性?您给出了什么路径?应该是“velocity/*.vm”。如果是在WEB-INF/classes中,您不需要前缀。很好,这很有效,我很好奇,这是一种正确的方法吗(将velocity模板保存在classes目录中)?我在这个话题上没有看到太多,但我从多个渠道听到了相同的做法。当然,为什么不可以呢?您只需将模板放在资源loa所在的类路径中