freemarker无法处理谷歌应用引擎上的’/’请求

我正在努力让freemarker在Google App Engine下工作。 我已经得到了简单的ftl模板文件直接请求工作但是我想让index.ftl工作,如果可用,否则index.html – 反之亦然。

  • 如果我请求/index.html ,它会像HTML一样呈现。
  • 如果我请求/index.ftl ,它可以作为FreeMarker模板呈现。 变量得到扩展。
  • 但是,如果我请求’/’,它会给出以下404消息:

    访问/index.html/index.ftl时出现问题。

我的web.xml文件中有以下内容:

    index.html index.ftl   freemarker freemarker.ext.servlet.FreemarkerServlet  TemplatePath file://ftl  1   freemarker *.ftl   

我在Eclipse GAE应用程序的war/目录中有以下内容:

  • /index.html
  • /ftl/index.ftl
  • / WEB-INF / …

如果我切换index.ftl和index.html条目的顺序,请求/给出以下404消息:

Problem accessing /index.ftl/index.ftl.

谢谢你的帮助。


另外一点信息是,如果我有一个index.html 条目,它可以正常工作。 当我以任何顺序添加index.ftl时,就是我收到错误的时候。

谢谢你的帮助。

我认为这里的问题非常类似于使用struts动作作为欢迎页面的问题。 引用Damien B从这个问题的答案

没有(除了使用jsp重定向之外的更好的方法)。 Servlet规范(例如Java Servlet规范2.4,“SRV.9.10欢迎文件”)状态:

此机制的目的是允许部署者在请求与WAR中未映射到Web组件的WAR中的目录条目的URI时,为容器指定用于附加到URI的部分URI的有序列表。 。

由于它映射到目录条目而不是映射的Web组件,因此当index.ftl是欢迎文件时,“/”不会转发到freemarker servlet。

我建议尝试使用相同的方法将操作作为欢迎页面。 你的index.ftl有一个jsp fwd。

我仍在寻找解决方案(虽然@Andy Pryor的答案可能最终是正确的)但我想我已经注意到我已经做了什么来解决这个问题。

我最终将所有html文件移动到FreeMarker视图层次结构中,以便FreeMarker servlet处理所有HTML和FreeMarker文件。 我不必支持*.ftl文件,因为我永远不会直接渲染它们。 因此,我在静态层次结构中的唯一文件是图像等。

这似乎运行良好,虽然我必须inheritanceFreemarkerServlet以阻止对请求发出的getSession()方法,因为我的应用程序没有启用会话。 这是我的web.xml文件:

    index.html   freemarker freemarker.ext.servlet.FreemarkerServlet  TemplatePath file://views  1   freemarker *.html