Шаблоны 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-файлы / файлы изображений), вы, вероятно, захотите рассмотреть добавление статического фильтра ресурсов.