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".