【问题标题】:Velocity template not found but why?找不到速度模板,但为什么?
【发布时间】:2015-06-22 17:09:51
【问题描述】:

我正在尝试使用 Velocity 模板引擎打造一个 hello world。这是我的代码:

package biz.tugay.app;

/* User: koray@tugay.biz Date: 22/06/15 Time: 10:36 */

import org.apache.velocity.Template;
import org.apache.velocity.app.Velocity;
import org.apache.velocity.context.Context;
import org.apache.velocity.tools.view.VelocityViewServlet;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class HelloTest extends VelocityViewServlet {

    @Override
    protected Template handleRequest
            (HttpServletRequest request, HttpServletResponse response, Context ctx) {
        Template template = null;
        try {
            ctx.put("name", "Velocity Test");
            template = Velocity.getTemplate("hello.vm");
        } catch( Exception e ) {
            System.err.println("Exception caught: " + e.getMessage());
        }
        return template;
    }
}

我会得到:

SEVERE: ResourceManager : unable to find resource 'hello.vm' in any resource loader.
Exception caught: Unable to find resource 'hello.vm'

我在 WEB-INF 中有一个 velocity.properties 文件:

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

hello.vm 如果在 WEB-INF/classes 文件夹下找到,如下所示:

hello $name

最后是 web.xml:

<web-app>
    <servlet>
        <servlet-name>HelloTest</servlet-name>
        <servlet-class>biz.tugay.app.HelloTest</servlet-class>
        <init-param>
            <param-name>properties</param-name>
            <param-value>/WEB-INF/velocity.properties</param-value>
        </init-param>
    </servlet>

    <servlet-mapping>
        <servlet-name>HelloTest</servlet-name>
        <url-pattern>/HelloTest</url-pattern>
    </servlet-mapping>

</web-app>

我做错了什么?

【问题讨论】:

  • 你试过关注this answer吗?
  • @AmosM.Carpenter 我想让 .properties 文件工作。
  • @AmosM.Carpenter 是对的 - 您的错误日志显示缺少“hello.vm”,该线程应该会有所帮助。
  • 该答案的最后两句话说:“看看我们如何首先告诉 VelocityEngine 在类路径中查找。没有这个,它不知道在哪里查找。”
  • @AmosM.Carpenter 我的回答正确吗?

标签: java jakarta-ee velocity


【解决方案1】:

好的,感谢@Amos,我让它像这样工作:

Velocity.setProperty(RuntimeConstants.RESOURCE_LOADER, "classpath");                             
Velocity.setProperty("classpath.resource.loader.class", ClasspathResourceLoader.class.getName());
ctx.put("name", "Velocity Test");                                                                
template = Velocity.getTemplate("hello.vm");                                                     

【讨论】:

    猜你喜欢
    • 2023-01-14
    • 1970-01-01
    • 2019-11-22
    • 1970-01-01
    • 2011-02-26
    • 1970-01-01
    • 2022-01-15
    • 1970-01-01
    相关资源
    最近更新 更多