Velocity属性文件通过web.xml

时间:2012-01-31 14:02:02

标签: java java-ee velocity

我正在尝试使用ClasspathResourceLoader来加载我的* .vm文件。我将它们放在/ WEB-INF / templates中,我已将其添加到构建路径中。我的web.xml有:

<servlet>
    <servlet-name>ServletVelocity</servlet-name>
    <servlet-class>com.edw.servlet.VelocityServlet</servlet-class>
    <init-param>
        <param-name>org.apache.velocity.properties</param-name>
        <param-value>/WEB-INF/velocity.properties</param-value>
    </init-param>
</servlet>

velocity.properties文件放在WEB-INF文件夹中。我需要的关键/值是:

resource.loader = class
class.resource.loader.class = org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader

然而,当我尝试:

template = Velocity.getTemplate("index.vm");

我明白了:

Exception caught: Unable to find resource 'index.vm'

我已经读过如果我的ResourceLoader失败会发生这种情况,但是我已经在属性文件中指定它是正确的,这是有效的。

默认情况下,Velocity使用位于jar内部的velocity.properties文件。如果我编辑那个一个(前面提到的两个键/值),一切正常。我的假设是我的web.xml中提到的velocity.properties无法加载,但是当我运行servlet时,我可以在我的控制台中看到这个:

INFO:  Velocity  [trace] Searching for properties at: /WEB-INF/velocity.properties
INFO:  Velocity  [debug] Configuring Velocity with properties at: /WEB-INF/velocity.properties
...
INFO:  Velocity  [debug] Initializing Velocity, Calling init()...
INFO:  Velocity  [debug] Default Properties File: org\apache\velocity\runtime\defaults\velocity.properties (???)
INFO:  Velocity  [debug] ResourceLoader instantiated: org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader
INFO:  Velocity  [trace] ClasspathResourceLoader : initialization complete.

但是,如果我在速度jar(org \ apache \ velocity \ runtime \ defaults \ velocity.properties)中编辑默认的velocity.properties文件,一切正常,我可以加载.vm好吧:没有错误。

2 个答案:

答案 0 :(得分:1)

当你打电话给Velocity.doanything时,你要求Velocity单身人士去做。您的速度属性正在配置VelocityServlet,而不是Velocity单例。

查看VelocityTools项目中的一些示例servlet应用程序。在那里你会发现一个不被弃用的高级servlet以及一些如何在servlet环境中使用Velocity的例子。

答案 1 :(得分:1)

/ WEB-INF / templates 中的文件不在类路径中,我对Velocity不确定,但Spring的ClassPathResourceLoader无法在该文件夹中找到文件,您必须使用Web上下文资源加载器。