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