JSP转发和重定向之间的区别[重复]

问题描述 投票:73回答:7

这个问题在这里已有答案:

请解释一下jsp:forwardredirect之间的区别。 每种情况都发生了什么?

jsp redirect servlets forward
7个回答
135
投票
  • redirect将响应状态设置为302 [1],并将新url设置为Location标头,并将响应发送给浏览器。然后,根据http规范,浏览器向新URL发出另一个请求
  • 转发完全发生在服务器上。 servlet容器只是将相同的请求转发到目标URL,而浏览器不知道这一点。因此,在处理新URL时,您可以使用相同的请求属性和相同的请求参数。并且浏览器不会知道网址已更改(因为它完全发生在服务器上)

[1]:这是与标准相矛盾的行业惯例的一个例子。 HTTP / 1.0规范(RFC 1945)要求客户端执行临时重定向(原始描述短语是“暂时移动”),但是流行的浏览器实现302具有303 See Other的功能。因此,HTTP / 1.1添加了状态代码303和307来区分这两种行为。但是,一些Web应用程序和框架使用302状态代码,就好像它是303.Source


35
投票

我听说过重定向和前进的有趣解释。想象一下,你需要你朋友的一些服务。什么服务并不重要。假设你的朋友无法帮助你,但知道谁可以。

如果他告诉你,他会改变你的要求:“我无法处理,但我知道谁可以。这是他的电话号码。打电话给他。”

如果他告诉你,他会提出你的要求:“没问题”,并且在没有通知你涉及另一个人处理你的愿望的情况下自称这个人。然后,您的朋友将获得整理您的愿望并将其传送给您的结果。


11
投票

与转发相比,重定向也较慢,因为它必须通过浏览器并等待浏览器发出新请求,因此导致请求范围对象在重定向后不可用。


6
投票

重定向:

  1. 用户请求资源。
  2. 响应发送给用户。
  3. 这不是请求的资源,这是HTTP代码302的响应,并包含所请求资源的URL。
  4. URL可以与请求的URL相同或不同。
  5. 客户端浏览器使用新URL再次请求资源,这次将实际资源发送给用户。

向前:

它是向用户简单显示所请求资源的过程。它完全发生在服务器端。


3
投票

This post使用一个很好的真实世界的例子给出了关于前向vs重定向的非常好的解释。

牛奶男子来,并要求你在家里每月付款。这里house是容器,你是容器中存在的资源。牛奶男是客户端或浏览器。

他要求你每月付款,这是浏览器向资源A提出的要求。如果你进入你的房子并要求你的母亲(同一个容器内的另一个资源B)获得现金并回来送给送奶工这被称为前锋。

如果你要求送牛奶的人在你家里对你母亲说话,或者你让送牛奶的人跟你在他办公室(不同领域)的父亲说话,那么这就叫做重定向。


1
投票
+-------------------------------------------------------------------------+-----------------------------------------------------------------------------+
|                             Forwards   vs.                              |                                  Redirects                                  |
+-------------------------------------------------------------------------+-----------------------------------------------------------------------------+
| ServletContext.getRequestDispatcher(location).forward(request,response) | httpServletResponse.sendRedirect(location)                                  |
| Communication between pages directly                                    | Communication b/w pages are indirectly by extra round trip from HTTP client |
| Communication happens within web-container                              | Communication happens outside web-container                                 |
| Use same Request and Response Object                                    | Use different Request and Response Object                                   |
+-------------------------------------------------------------------------+-----------------------------------------------------------------------------+

0
投票

转发请求时

- 请求和响应对象被转移。 -url保持不变。

将请求重定向到另一个JSP / servlet时,

- 请求和响应对象不会传输到新对象。 -Url更改为新页面的目录。

© www.soinside.com 2019 - 2024. All rights reserved.