代码之家  ›  专栏  ›  技术社区  ›  Gray droiddeveloper

FreeMarker无法在Google应用程序引擎上处理对“/”的请求

  •  3
  • Gray droiddeveloper  · 技术社区  · 15 年前

    我想让FreeMarker在谷歌应用引擎下工作。我已经得到了简单的ftl模板文件工作时,直接要求,但我想有index.ftl的工作,如果有的话,否则index.html-反之亦然。

    • 如果我请求 /index.html ,它呈现为HTML格式。
    • 如果我请求 /index.ftl ,它以自由标记模板的形式呈现。变量被展开。
    • 但是,如果我请求'/'它会给出以下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>
    

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

    • /html
    • /FTL/DIXX.FTL
    • /WEB-INF/…

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

    Problem accessing /index.ftl/index.ftl.

    谢谢你的帮助。


    另外一点信息是如果我有 <welcome-file> 进入 index.html 它工作得很好。当我添加 index.ftl 在任何顺序上,都是我得到错误的时候。

    谢谢你的帮助。

    2 回复  |  直到 15 年前
        1
  •  2
  •   Community Mohan Dere    9 年前

    我认为这里的问题与使用 struts action as a welcome page. 引用达米安B的回答

    没有比使用JSP重定向更好的方法了。servlet规格 (JavaServlet规范2.4) 例如“srv.9.10欢迎文件”)。 状态:

    这种机制的目的是 允许部署程序指定 的部分URI的有序列表 用于附加到URI的容器 当有一个URI请求 对应于中的目录项 战争未映射到Web组件。

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

    我建议用同样的方法让动作成为欢迎页面。在index.ftl中有一个jsp fwd。

        2
  •  0
  •   Gray droiddeveloper    15 年前

    我仍在寻找解决方案(尽管@andy pryor的答案可能最终是正确的),但我认为我会注意到我为解决这个问题所做的工作。

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

    虽然我必须对freemakerservlet进行子类化,以阻止对请求所做的getsession()方法,但这似乎工作得很好,因为我的应用程序没有启用会话。这是我的 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-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://views</param-value>
            </init-param>
            <load-on-startup>1</load-on-startup>
        </servlet>
        <servlet-mapping>
            <servlet-name>freemarker</servlet-name>
            <url-pattern>*.html</url-pattern>
        </servlet-mapping>
    </web-app>
    
    推荐文章