Вы сопоставили 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()
.