У меня проблема с моей страницей, когда я пользуюсь 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
( "Покупка" - это имя моего модуля).
Какая разница?
Чтобы просто объяснить разницу,
response.sendRedirect("login.jsp");
не добавляет контекстный путь (относится к приложению/модулю, в котором подключен сервлет)
но, тогда как
request.getRequestDispathcer("login.jsp").forward(request, response);
добавит контекстный путь к соответствующему приложению
Кроме того, Запрос перенаправления используется для перенаправления ресурсов на разные серверы или домены. Эта передача задачи управления делегируется браузеру контейнером. То есть, перенаправление отправляет заголовок обратно в браузер/клиент. Этот заголовок содержит URL-адрес ресурса, который будет перенаправлен браузером. Затем браузер инициирует новый запрос к указанному URL-адресу.
Запрос переадресации используется для пересылки ресурсов, доступных на сервере, с которых выполняется вызов. Эта передача управления осуществляется контейнером внутри, а браузер/клиент не задействован.
вперед
Элемент управления может быть перенаправлен на ресурсы, доступные на сервере, с которого выполняется вызов. Эта передача управления осуществляется контейнером внутри, а браузер/клиент не задействован. Это основное различие между forward и sendRedirect. Когда форвард завершен, исходные объекты запроса и ответа передаются вместе с дополнительными параметрами, если это необходимо.
перенаправлять
Управление может быть перенаправлено на ресурсы на разные серверы или домены. Эта передача задачи управления делегируется браузеру контейнером. То есть, перенаправление отправляет заголовок обратно в браузер/клиент. Этот заголовок содержит URL-адрес ресурса, который будет перенаправлен браузером. Затем браузер инициирует новый запрос к указанному URL-адресу. Поскольку это новый запрос, старый объект запроса и ответа теряется.
Например, sendRedirect может передавать управление из http://google.com в http://anydomain.com, но пересылка невозможна это.
'не теряется как в прямом, так и в переадресации.
Чтобы почувствовать разницу между forward и sendRedirect, визуально см. адресную строку вашего браузера, вперед, вы не увидите перенаправленный адрес (поскольку браузер не задействован) при переадресации вы можете увидеть перенаправленный адрес.
Простое различие между Forward
(запрос ServletRequest, ответ ServletResponse) и sendRedirect
(строковый URL)
forward():
forward()
выполняется на стороне сервера.forward ()
предоставляется контейнером сервлета.sendRedirect()
.RequestDispatcher
.sendRedirect():
sendRedirect()
выполняется на стороне клиента.sendRedirect()
предоставляется в HTTP
, поэтому его можно использовать только с HTTP
клиентами.sendRedirect()
медленнее, потому что при создании нового запроса старый объект запроса теряется.HttpServletResponse
.1.redirect возвращает запрос браузеру с сервера, а затем повторно отправит запрос на сервер из браузера.
2. отправьте запрос другому сервлету (сервлет-сервлет).
Диспетчер перенаправления и запроса - это два разных метода перемещения одной страницы на другую. если мы используем перенаправление на новую страницу, на самом деле происходит новый запрос с самой клиентской стороны на новую страницу. поэтому мы можем увидеть изменение URL. Поскольку перенаправление - это новый запрос, старые значения запроса здесь недоступны.
redirect: вернуть запрос браузеру/клиенту с сервера, а затем повторно отправить запрос на сервер из браузера/клиента.
forward: отправить запрос на другой сервлет (сервлет на сервлет) и не отправлять запрос другому браузеру/клиенту.
redirect
вернется в браузер и отобразится вurl
, кажется, что вы упомянулиurl
наоборот. пожалуйста, отредактируйте вопрос.