Шаблоны URL сервлетов в Google App Engine

Я пытаюсь выполнить простую работу с 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>

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

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

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

1 ответ

Вы скучаете по 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 в вашем файле war. Измените атрибут include path соответствующим образом, если вы не хотите этого делать.

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

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

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

Другие вопросы по тегам