freemarker 无法处理 '/' 的请求在谷歌应用引擎上
我正在尝试让 freemarker 在 Google App Engine 下工作。当直接请求时,我已经得到了简单的 ftl 模板文件,但我希望 index.ftl 可以工作(如果可用的话,否则可以使用 index.html)——反之亦然。
- 如果我请求
/index.html
,它会很好地呈现为 HTML。 - 如果我请求
/index.ftl
,它可以很好地呈现为 FreeMarker 模板。变量被扩展。 - 但是,如果我请求“/”,它会给出以下 404 消息: <块引用>
访问 /index.html/index.ftl 时出现问题。
我的 web.xml 文件中有以下内容:
<?xml version="1.0" encoding="utf-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.ftl</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>freemarker</servlet-name>
<servlet-class>freemarker.ext.servlet.FreemarkerServlet</servlet-class>
<init-param>
<param-name>TemplatePath</param-name>
<param-value>file://ftl</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>freemarker</servlet-name>
<url-pattern>*.ftl</url-pattern>
</servlet-mapping>
</web-app>
我的 Eclipse GAE 应用程序的 war/
目录中有以下内容:
- /index.html
- /ftl/index.ftl
- /WEB-INF/...
如果我切换 index.ftl 的顺序和 index.html 条目,对 / 的请求给出以下 404 消息:
访问 /index.ftl/index.ftl 时出现问题。
感谢您的帮助。
另外一点信息是,如果我有一个
条目 index.html
,它就可以正常工作。当我以任何顺序添加 index.ftl
时,就会出现错误。
感谢您的任何帮助。
I'm trying to get freemarker working under Google App Engine. I've gotten simple ftl template files working when requested directly however I'd like to have index.ftl work if available otherwise index.html -- or vice versa.
- If I request
/index.html
, it renders fine as HTML. - If I request
/index.ftl
, it renders fine as a FreeMarker template. Variables are expanded. - If, however, I request '/' it gives the following 404 message:
Problem accessing /index.html/index.ftl.
I have the following in my web.xml file:
<?xml version="1.0" encoding="utf-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.ftl</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>freemarker</servlet-name>
<servlet-class>freemarker.ext.servlet.FreemarkerServlet</servlet-class>
<init-param>
<param-name>TemplatePath</param-name>
<param-value>file://ftl</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>freemarker</servlet-name>
<url-pattern>*.ftl</url-pattern>
</servlet-mapping>
</web-app>
I have the following in the war/
directory of my Eclipse GAE application:
- /index.html
- /ftl/index.ftl
- /WEB-INF/...
If I switch the order of the index.ftl and index.html entries, a request for / gives the following 404 message:
Problem accessing /index.ftl/index.ftl.
Thanks for any help.
One additional bit of information is that if I have one <welcome-file>
entry of index.html
, it works fine. When I add the index.ftl
, in any order, is when I get the errors.
Thanks for any help.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我认为这里的问题与使用 struts action 作为欢迎页面。
引用 Damien B 在该问题中的回答
由于它映射到目录条目而不是映射的 Web 组件,因此当 index.ftl 是欢迎文件时,“/”不会转发到 freemarker servlet。
我建议尝试使用与将操作设为欢迎页面相同的方法。其中有一个jsp转发到您的index.ftl。
I think the problem here is pretty similar the problem of using a struts action as a welcome page.
Quoting Damien B's answer from that question
Since it is mapped to directory entry and not a mapped web component, the "/" isn't forwarding to the freemarker servlet when index.ftl is the welcome file.
I suggest trying the same approach used to make actions a welcome page. Which is have a jsp fwd to your index.ftl.
我仍在寻找解决方案(尽管 @Andy Pryor 的答案可能最终是正确的),但我认为我会注意到我为解决此问题所做的工作。
我最终将所有 html 文件移至 FreeMarker 视图层次结构中,以便所有 HTML 和 FreeMarker 文件都由 FreeMarker servlet 处理。我不必支持
*.ftl
文件,因为我永远不会直接渲染它们。因此,我的静态层次结构中唯一的文件是图像等。这似乎工作得很好,尽管我必须对 FreemarkerServlet 进行子类化以阻止对请求进行的 getSession() 方法,因为我的应用程序没有启用会话。这是我的
web.xml
文件:I'm still looking for the solution to this (although @Andy Pryor's answer may be ultimately right) but I thought that I'd note what I've done to work around this issue.
I ended up moving all of my html files into the FreeMarker view hierarchy so that all HTML and FreeMarker files are processed by the FreeMarker servlet. I don't have to support
*.ftl
files since I will never be rendering them directly anyway. So the only files I have in my static hierarchy are images and the like.This seems to be working well although I had to subclass the FreemarkerServlet to block the getSession() methods made on the request since my app does not have sessions enabled. Here's my
web.xml
file: