FreeMarker не может обработать запрос на '/' в Google App Engine - PullRequest
3 голосов
/ 08 ноября 2010

Я пытаюсь заставить работать бесплатный маркер под 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>

В каталоге war/ моего приложения Eclipse GAE есть следующее:

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

Если я переключу порядок записей index.ftl и index.html, запрос / выдаст следующее сообщение 404:

Problem accessing /index.ftl/index.ftl.

Спасибо за любую помощь.


Еще один бит информации заключается в том, что, если у меня есть одна <welcome-file> запись index.html, она работает нормально. Когда я добавляю index.ftl, в любом порядке, когда я получаю ошибки.

Спасибо за любую помощь.

Ответы [ 2 ]

2 голосов
/ 09 ноября 2010

Я думаю, что проблема здесь очень похожа на проблему использования действия в качестве страницы приветствия. Цитата ответа Дэмиена Б. на этот вопрос

Нет (лучший способ, чем использование перенаправления JSP).Спецификации сервлетов (например, спецификация Java сервлетов 2.4, «Файлы приветствия SRV.9.10»):

Цель этого механизма - позволить развертывателю указать упорядоченный список частичных URI для контейнера, который будет использоваться длядобавление к URI, когда есть запрос на URI, который соответствует записи каталога в WAR, не сопоставленной с веб-компонентом.

Поскольку он сопоставлен с записью каталога, а не с сопоставленным веб-компонентом,"/" не пересылает сервлету свободного маркера, когда index.ftl является файлом приветствия.

Я предлагаю попробовать тот же подход, который использовался, чтобы сделать действия страницой приветствия.Который имеет JSP FWD к вашему index.ftl.

0 голосов
/ 09 ноября 2010

Я все еще ищу решение этой проблемы (хотя ответ @Andy Pryor может быть в конечном итоге правильным), но я подумал, что хотел бы отметить, что я сделал, чтобы обойти эту проблему.

В итоге я переместил все свои html-файлы в иерархию представлений FreeMarker, чтобы все файлы HTML и FreeMarker обрабатывались сервлетом FreeMarker. Мне не нужно поддерживать *.ftl файлы, так как я никогда не буду отображать их напрямую. Поэтому в моей статической иерархии есть только файлы изображений и т. П.

Кажется, это работает хорошо, хотя мне пришлось создать подкласс FreemarkerServlet для блокировки методов 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>
...