URL-адрес сервлета - PullRequest
       30

URL-адрес сервлета

2 голосов
/ 15 декабря 2011

У меня есть два сервлета (MainServlet и LoginServlet), и MainServlet обрабатывает весь запрос, и он сопоставляется с /*.LoginServlet обрабатывает запрос, и он сопоставляется с / login.У меня есть один HTML-файл /html/login.html.Теперь я хочу показать этот HTML-файл, когда я нажимаю http://localhost:8080/app/login.

В LoginServlet doGet метод я делаю httpServletRequest.getRequestDispatcher("login/login.html").include(httpServletRequest, httpServletResponse);

, но этот запрос перенаправления на MainServlet.Я не могу изменить отображение URL-адреса MainSerlvet с /* на что-то другое.

Любая идея, как я могу достичь выше?PS: Если вопрос не ясен, скажите, пожалуйста.

1 Ответ

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

Вы сопоставили MainServlet с глобальным шаблоном URL /*, что является довольно плохой практикой для сервлетов (это также охватывает статические ресурсы, такие как CSS / JS / images / etc!). Это также будет перехватывать все перенаправленные и включенные запросы. Вам необходимо сопоставить MainServlet с более конкретным шаблоном URL, например, /main/*, /app/* или что-то в этом роде и создайте Filter, который сопоставлен с /* и перенаправляет все не /login запросы на MainServlet.

String uri = ((HttpServletRequest) request).getRequestURI();

if (uri.startsWith("/login/")) {
    // Just continue to login servlet.
    chain.doFilter(request, response);
} else {
    // Forward to main servlet.
    request.getRequestDispatcher("/main" + uri).forward(request, response);
}

Кстати, использование RequestDispatcher#include() для отображения вида также не совсем корректно. Вместо этого вы должны использовать RequestDispatcher#forward().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...