dispatcher.forward вызывает бесконечный цикл - PullRequest
0 голосов
/ 01 июля 2019

Я пытаюсь сделать следующее: я создаю сервлет для обработки всех запросов, и если в URL-адресе содержится слово «hello», тогда задаю код ответа 403, в противном случае пересылаю запрос на html-страницу.Вот мой сервлет:

@WebServlet("/*")
public class AllRequestsHandlerServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String url = request.getRequestURL().toString();
        if(url.contains("hello")) {
            response.setStatus(HttpServletResponse.SC_FORBIDDEN);
        } else {
            RequestDispatcher dispatcher = request.getRequestDispatcher("/static-html-page.html");
            dispatcher.forward(request, response);
        }
    }
}

Но после пересылки, поскольку этот сервлет тоже обрабатывает перенаправленный запрос, он вызывает бесконечный цикл.Как я могу избежать этого?

1 Ответ

1 голос
/ 03 июля 2019

Это никогда не будет работать, потому что /* сопоставляется с каждым запросом - включая переадресацию на /static-html-page.html, а сопоставления путей имеют приоритет над всеми другими сопоставлениями.

Существует несколько способов обойти это.Простейшим (при условии отсутствия другого содержимого в веб-приложении) будет:

  • переименовать /static-html-page.html в /static-html-page.jsp
  • изменить сопоставление с /* на /

Это означает, что /static-html-page.jsp будет доступен напрямую.Если вы не хотите этого, переместите его под /WEB-INF.request.getRequestDispatcher("/WEB-INF/static-html-page.html") все еще будет работать.

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