В чем разница между response.sendRedirect () и request.getRequestDispatcher (). Forward (запрос, ответ)

42

У меня проблема с моей страницей, когда я пользуюсь JAVA, если я использую:

response.sendRedirect("login.jsp")

тогда я получаю этот url: http://localhost:8080/login.jsp

Но если я использую

request.getRequestDispathcer("login.jsp").forward(request, response)

то я получаю этот url: http://localhost:8080/Shopping/login.jsp ( "Покупка" - это имя моего модуля).

Какая разница?

  • 0
    В случае, если запрос на redirect вернется в браузер и отобразится в url , кажется, что вы упомянули url наоборот. пожалуйста, отредактируйте вопрос.
Теги:
jsp
request
response
forward

6 ответов

64
Лучший ответ

Чтобы просто объяснить разницу,

  response.sendRedirect("login.jsp");

не добавляет контекстный путь (относится к приложению/модулю, в котором подключен сервлет)

но, тогда как

 request.getRequestDispathcer("login.jsp").forward(request, response);

добавит контекстный путь к соответствующему приложению

Кроме того, Запрос перенаправления используется для перенаправления ресурсов на разные серверы или домены. Эта передача задачи управления делегируется браузеру контейнером. То есть, перенаправление отправляет заголовок обратно в браузер/клиент. Этот заголовок содержит URL-адрес ресурса, который будет перенаправлен браузером. Затем браузер инициирует новый запрос к указанному URL-адресу.

Запрос переадресации используется для пересылки ресурсов, доступных на сервере, с которых выполняется вызов. Эта передача управления осуществляется контейнером внутри, а браузер/клиент не задействован.

  • 0
    Большое спасибо! Это мне очень помогает!
  • 0
    Добро пожаловать :)
Показать ещё 2 комментария
16

вперед

Элемент управления может быть перенаправлен на ресурсы, доступные на сервере, с которого выполняется вызов. Эта передача управления осуществляется контейнером внутри, а браузер/клиент не задействован. Это основное различие между forward и sendRedirect. Когда форвард завершен, исходные объекты запроса и ответа передаются вместе с дополнительными параметрами, если это необходимо.

перенаправлять

Управление может быть перенаправлено на ресурсы на разные серверы или домены. Эта передача задачи управления делегируется браузеру контейнером. То есть, перенаправление отправляет заголовок обратно в браузер/клиент. Этот заголовок содержит URL-адрес ресурса, который будет перенаправлен браузером. Затем браузер инициирует новый запрос к указанному URL-адресу. Поскольку это новый запрос, старый объект запроса и ответа теряется.

Например, sendRedirect может передавать управление из http://google.com в http://anydomain.com, но пересылка невозможна это.

'не теряется как в прямом, так и в переадресации.

Чтобы почувствовать разницу между forward и sendRedirect, визуально см. адресную строку вашего браузера, вперед, вы не увидите перенаправленный адрес (поскольку браузер не задействован) при переадресации вы можете увидеть перенаправленный адрес.

12

Простое различие между Forward (запрос ServletRequest, ответ ServletResponse) и sendRedirect (строковый URL)

forward():

  • Метод forward() выполняется на стороне сервера.
  • Запрос - это передача на другой ресурс на том же сервере.
  • Он не зависит от протокола запросов клиентов, так как метод forward () предоставляется контейнером сервлета.
  • Запрос разделяется целевым ресурсом.
  • В этом методе используется только один вызов.
  • Он может использоваться на сервере.
  • Мы не можем видеть перенаправленное сообщение, оно прозрачно.
  • Метод forward() быстрее, чем метод sendRedirect().
  • Он объявлен в интерфейсе RequestDispatcher.

sendRedirect():

  • Метод sendRedirect() выполняется на стороне клиента.
  • Запрос - это передача другого ресурса на другой сервер.
  • Метод sendRedirect() предоставляется в HTTP, поэтому его можно использовать только с HTTP клиентами.
  • Новый запрос создается для целевого ресурса.
  • Расходуются два запроса на запрос и ответ.
  • Он может использоваться как внутри, так и вне сервера.
  • Мы можем видеть перенаправленный адрес, он не прозрачен.
  • Метод sendRedirect() медленнее, потому что при создании нового запроса старый объект запроса теряется.
  • Объявлено в HttpServletResponse.
3

1.redirect возвращает запрос браузеру с сервера, а затем повторно отправит запрос на сервер из браузера.

2. отправьте запрос другому сервлету (сервлет-сервлет).

2

Диспетчер перенаправления и запроса - это два разных метода перемещения одной страницы на другую. если мы используем перенаправление на новую страницу, на самом деле происходит новый запрос с самой клиентской стороны на новую страницу. поэтому мы можем увидеть изменение URL. Поскольку перенаправление - это новый запрос, старые значения запроса здесь недоступны.

0

redirect: вернуть запрос браузеру/клиенту с сервера, а затем повторно отправить запрос на сервер из браузера/клиента.

forward: отправить запрос на другой сервлет (сервлет на сервлет) и не отправлять запрос другому браузеру/клиенту.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню