Gymterview
junior

Чем отличается sendRedirect() от forward()

Это два принципиально разных механизма перенаправления: forward() работает на стороне сервера, а sendRedirect() — на стороне клиента.

Критерий forward() sendRedirect()
Сторона выполнения Сервер Клиент (через HTTP 302)
Количество запросов 1 (тот же запрос) 2 (новый запрос от клиента)
URL в браузере Не меняется Меняется на новый
Область применения Только в пределах приложения Любой URL, включая внешние
Доступ к request-атрибутам Да (тот же объект запроса) Нет (новый запрос)
Скорость Быстрее (нет сетевого round-trip) Медленнее (дополнительный запрос)
Определён в RequestDispatcher HttpServletResponse

Практическое правило: используйте forward() для внутренней навигации (например, от контроллера к JSP-представлению). Используйте sendRedirect() после POST-запросов (паттерн Post/Redirect/Get) для предотвращения повторной отправки формы при обновлении страницы.

На собеседовании: обязательно упомяните паттерн PRG (Post/Redirect/Get) — это показывает понимание практического применения sendRedirect(). В Spring MVC: return "forward:/page" и return "redirect:/page".