0

我正在使用存储在src/main/webapp/templates.

我基于 Jersey 的 REST 服务需要找到这些模板。在我的 Eclipse 本地(使用 Sysdeo 插件),我使用

p.setProperty("resource.loader", "class");
p.setProperty("class.resource.loader.class",
    "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader");

让 Tomcat 找到模板(我从https://stackoverflow.com/a/38812523/927493获得)。现在,当我将战争部署到“真正的”Tomcat 时,找不到资源(无法找到资源“模板/FreigabeNeu.vm”)

我可能必须将属性设置为不同的东西,但我只是不知道该怎么做。

我检查了该templates目录确实被复制到了战争的主目录。

4

1 回答 1

2

ClasspathResourceLoader将从classpath加载资源,而不仅仅是 WAR 文件中的某个任意位置。这意味着如果您的模板/webapp/templates在您的 WAR 文件(或任何地方)中,但该路径不在classpath中,那么将无法找到它们。

如果这是一个 Web 应用程序,那么您真正想要使用的是Velocity Tools WebappLoader,它使用ServletContext从上下文本身加载文件。它能够从 Web 应用程序中的几乎任何地方读取文件,甚至从 WAR 文件等中读取文件。

您可能需要仔细检查 WAR 文件的结构(templates/目录的最终位置),以确保基本路径正确。我的猜测是它们最终会出现在/templatesor下/webapp/templates,但我怀疑前者更有可能......该目录webapp很可能最终成为 WAR 文件的根目录,所以/templates可能是正确的。

于 2018-05-15T14:16:06.030 回答