Сервлет:
Конечно, в сервлетах переходы обычно происходят в doGet, doPost и других методах.
1) метод перенаправления
response.sendRedirect("/a.jsp");
Путь к странице является относительным. sendRedirect может перейти на любую страницу, не обязательно ограничиваясь этим веб-приложением, например:
response.sendRedirect("//www.VeVB.COm");
Адресная строка браузера меняется после перехода.
Если вы хотите передать значение таким способом, вы можете перенести параметр только в URL-адрес или поместить его в сеанс. Вы не можете использовать request.setAttribute для его передачи.
2) прямой метод
Диспетчер RequestDispatcher = request.getRequestDispatcher("/a.jsp");
диспетчер .forward(запрос, ответ);
Путь к странице является относительным. Метод пересылки может переходить только на страницы этого веб-приложения.
Адресная строка браузера не изменится после перехода.
Используя этот метод для перехода, вы можете использовать три метода для передачи значений: параметр, сеанс, request.setAttribute в URL-адресе.
ДСП:
1) ответ.sendRedirect();
Тот же метод, что и у сервлета response.sendRedirect().
Out.flush() не разрешен перед этим оператором. Если он существует, произойдет исключение:
java.lang.IllegalStateException: невозможно отправитьRedirect() после того, как данные были переданы клиенту.
в com.caucho.server.connection.AbstractHttpResponse.sendRedirect(AbstractHttpResponse.java:558)
...
Адресная строка браузера меняется после перехода
Если вы хотите перейти на другой хост, после перехода операторы, следующие за этим оператором, будут продолжать выполняться, как если бы был открыт новый поток, но операция ответа бессмысленна;
Если вы хотите перейти на тот же хост, переход не произойдет до тех пор, пока не будут выполнены операторы, следующие за этим оператором;
2) response.setHeader("Местоположение","");
Out.flush() не разрешен перед этим оператором. Если он есть, страница не будет переходить.
Адресная строка браузера меняется после перехода
Переход не произойдет, пока не будут выполнены операторы, следующие за этим оператором.