Шаблоны URL сервлетов в Google App Engine - PullRequest
2 голосов
/ 30 декабря 2011

Я пытаюсь выполнить простую работу с URL-шаблоном, который хорошо работает на локальном хосте, но не удается, когда приложение развернуто на сервере GAE.Я хочу сделать следующее:

  • Один сервлет для обслуживания всех запросов
  • Этот сервлет будет перенаправлять некоторые запросы в файлы jsp (в большинстве случаев)

Для этого я настроил web.xml:

<servlet>
    <servlet-name>MyServlet</servlet-name>
    <servlet-class>com.mycompany.MyServlet</servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>MyServlet</servlet-name>
    <url-pattern>/MyServlet</url-pattern>
</servlet-mapping>
<welcome-file-list>
    <welcome-file>MyServlet</welcome-file>
</welcome-file-list>

Это прекрасно работает с сервером localhost GAE, но когда приложение развернуто на реальном сервере GAE, оно не работает.Проблема в том, что когда я захожу на myapp.appspot.com/anything, GAE отвечает:

Ошибка: не найдена Запрошенный URL / что-либо не найдено на этом сервере.

Может кто-нибудь мне помочьпожалуйста?

1 Ответ

1 голос
/ 30 декабря 2011

Вам не хватает элемента Servlet. Элемент Servlet-mapping сам по себе недостаточен. Создайте свой web.xml попробуйте это ....

    <servlet>
            <servlet-name>MyServlet</servlet-name>
            <servlet-class>package.path.to.my.servlet.MyServlet</servlet-class>
    </servlet>
    <servlet-mapping>
            <servlet-name>MyServlet</servlet-name>
            <url-pattern>/MyServlet</url-pattern>
    </servlet-mapping>

Конечно, заменив package.path.to.my.servlet фактическим пакетом вашего MyServlet класса. Сделав это, вы можете добавить несколько элементов отображения сервлетов, чтобы отобразить разные URL в один и тот же сервлет.

Если это происходит в URL вашего appspot, вы можете попробовать и убедиться, что все ваши статические файлы развертываются в вашем appspot ...

    <static-files>
      <include path="/**.css" />
      <include path="/**.xml" />
    </static-files>

Просто отметьте, что это означает, что вы развертываете все файлы xmls / css в вашем файле войны. Измените атрибут include path соответствующим образом, если вы не хотите этого делать.

Кроме того, чтобы все запросы направлялись к одному сервлету, просто используйте следующий шаблон URL ...

<url-pattern>/*</url-pattern>

При использовании этого паттерна просто помните, что если у вас есть images / css files / jsp files / etc, этот сервлет перехватит запрос на них. Таким образом, у вас будет какая-то логика, которая направляет запросы, которые вам не интересны. Этого может быть достаточно, если вы делаете что-то прямо; но по мере того, как вы усложняетесь (например, кешируете css-файлы / файлы изображений), вам, вероятно, захочется добавить статический фильтр ресурсов.

...