【问题标题】:How do I use StringTemplate files in Google App Engine?如何在 Google App Engine 中使用 StringTemplate 文件?
【发布时间】:2012-03-15 09:34:46
【问题描述】:

我正在尝试使用 Google App Engine 中的 StringTemplate 从文件中加载模板,但我不知道将模板文件放在哪里。

文档说 StringTemplate 将“在 CLASSPATH 中查找模板作为资源”,但我不确定这对 GAE 部署意味着什么。

例如,假设我将模板放在一个名为“templates”的目录中,并将这样的代码放在我的 servlet 中:

StringTemplateGroup group = new StringTemplateGroup("mygroup", "templates");
StringTemplate st = group.getInstanceOf("homepage");

那么我应该把“模板”目录放在哪里呢?

【问题讨论】:

  • 请注意,如果我将“templates”替换为模板目录的绝对路径,则当我在调试模式下本地运行时,此示例有效。当然,如果将其部署到 Google App Engine,这将不起作用。

标签: java google-app-engine stringtemplate


【解决方案1】:

事实证明,将“templates”目录放在“war”目录中是可行的。

这在本地工作并部署到 GAE(无论如何对我来说)。

【讨论】:

  • 那你能接受你自己的答案吗?对于偶然发现相同问题的其他用户会很有用。
  • 就 GAE 而言,我认为您不需要将它们设为“静态”文件。相反,它们似乎需要保留“资源文件”并部署到与您的应用程序相同的服务器上。根据文档,这是war目录的默认行为:developers.google.com/appengine/docs/java/config/…
  • JR Lawhome——我相信你是正确的(我在产品中根本没有使用“静态”),所以我相应地修改了答案。谢谢。
  • 你用的是最新版的ST吗?我正在尝试并获得 NullPointerException。模板目录在我的战争目录中。 STGroup group = new STGroupDir("templates/default",'$','$');ST stPage = group.getInstanceOf("page");
  • 当时我实施的建议是 v4 不兼容 GAE,所以我改用 stringtemplate-3.0.jar。恼人的?是的。
【解决方案2】:

您的“war/WEB-INF/lib”肯定会在classpath 上。不过,不确定在那里有模板有多合适。

也可以看看this SO question

【讨论】:

  • 谢谢,但把它放在“war/WEB-INF/lib”中是行不通的。我注意到您链接到的 SO 问题,第一个答案将模板暴露给 HTTP(丑陋,我不明白它为什么会起作用),第二个建议您自己将模板文件加载到字符串中,然后传递给 StringTemplate。现在我将采用后一种方法,但我认为问题没有解决。
【解决方案3】:

把它们放在你的war/WEB-INF/classes 目录的根目录下,它们就会出现在你的类路径中。如果您使用 maven 构建,可以将它们放在 src/main/resources 中,它们将被复制到根目录下的类路径中。

【讨论】:

  • 谢谢,但我在 Eclipse 中没有这样的目录,但我不允许创建一个新目录,因为(Eclipse 说)它已经存在。我怀疑它是为不是由我的特定应用程序创建的构建输出保留的。我尝试创建一个名为“class”的新目录并添加到构建路径,但这也不起作用。
  • 不,这行不通。只需将它们放在 java 源目录的根目录中,它们就会被复制到正确的位置。因此,如果您有类似 src/com/foo/bar 之类的内容,请将它们放在 src 中。
猜你喜欢
  • 2013-12-17
  • 2019-06-02
  • 2010-11-20
  • 2017-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多