我正在使用存储在 src/main/webapp/templates
中的 Velocity 模板。
我基于 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 得到的)。现在,当我将 war 部署到“真正的”Tomcat 时,未找到资源(无法找到资源“templates/FreigabeNeu.vm”)
我可能必须将属性设置为不同的东西,但我只是不知道我需要怎么做。
我检查了 templates
目录确实被复制到了 war 的主目录。
最佳答案
ClasspathResourceLoader
将从类路径 加载资源,而不仅仅是 WAR 文件中的任意位置。这意味着如果您的模板位于 WAR 文件(或任何地方)的 /webapp/templates
中,但该路径不在 classpath 中,那么它们将无法被发现。
如果这是一个 Web 应用程序,那么您真正想要使用的是 Velocity Tools's WebappLoader
使用 ServletContext
从上下文本身加载文件。它能够从 Web 应用程序的几乎任何位置读取文件,甚至可以从 WAR 文件等读取文件。
您可能需要仔细检查以查看 WAR 文件的结构——templates/
目录的确切位置——以确保基本路径正确。我的猜测是它们最终将位于 /templates
或 /webapp/templates
下,但我怀疑前者更有可能......目录 webapp
很可能最终成为 WAR 文件的根目录,因此 /templates
可能是正确的。
关于java - 让速度在 war 中找到模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50329101/