в моем проекте Google App Engine все запросы обрабатываются сервлетом, который в конце перенаправляется на соответствующий JSP:
RequestDispatcher rd = mServletContext.getRequestDispatcher("/views/" + pViewName + ".jsp");
rd.forward(mRequest, mResponse);
Все это отлично работает в Интернете на Google App Engine. Но когда я использую локальный сервер из SDK Google App Engine (с «dev_appserver.cmd»), создается бесконечный цикл. Я вижу, что форвард снова обрабатывается моим сервлетом. Этого не происходит онлайн.
Мой web.xml:
<?xml version="1.0" encoding="utf-8"?>
<web-app xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
xmlns="https://java.sun.com/xml/ns/javaee"
xmlns:web="https://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="https://java.sun.com/xml/ns/javaee
https://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
<servlet>
<servlet-name>HtmlStarterServlet</servlet-name>
<servlet-class>com.kupkik.ui.html.HtmlStarterServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HtmlStarterServlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
</web-app>
Мой проект - это проект Maven (созданный с использованием архетипа скелета). Структура моего проекта выглядит так:
- src
- main
- java
- com.kupkik.ui.html.HtmlStarterServlet
- webapp
- views
- test.jsp
- views
- ВЕБ-ИНФ
- java
- контрольная работа
- main
HtmlStarterServlet:
@SuppressWarnings("serial")
public class HtmlStarterServlet
extends HttpServlet
{
@Override
public void doGet(HttpServletRequest r,HttpServletResponse rs) throws IOException
{
String t = r.getRequestURI();
System.out.println("test: " + t);
RequestDispatcher rd = getServletContext().getRequestDispatcher("/views/test.jsp");
try
{
rd.forward(r, rs);
}
catch( ServletException e )
{
System.out.println("ex");
}
}
}
Вывод на консоль при запуске сервера разработки в режиме отладки:
test: /
test: /views/test.jsp
test: /views/test.jsp
test: /views/test.jsp
... (and so on)
Итак, мой вопрос: почему локальный сервер из SDK и онлайн-GAE ведут себя по-разному? А кто-нибудь знает, как исправить проблему, чтобы работало на обоих?
Я хочу, чтобы все запросы обрабатывались одним сервлетом, который выбирает JSP для отображения.