java - 让速度在 war 中找到模板

标签 java tomcat jersey velocity resource-loading

我正在使用存储在 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/

相关文章:

Java泛型方法通过使用类型开关获取类型值

Eclipse Tomcat 错误 404

java - neo4j条件关系

java - 如何在现有的jar中注入(inject)编译类?

windows - 使用 Chef 的多个 tomcat 实例

jersey - @DenyAll 被 Jersey (JAX-RS) 忽略

java - Jersey GET 请求可以返回多态实体吗​​?

java - Jersey 客户端调用 RESTful 服务

java callable语句帮助使用包过程

exception - 无法解决此错误 - NotSerializableException?