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

Posted

技术标签:

【中文标题】JSP转发和重定向之间的区别[重复]【英文标题】:Difference between JSP forward and redirect [duplicate] 【发布时间】:2011-08-29 11:02:32 【问题描述】:

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

【问题讨论】:

(在 Spring MVC 中)如果我返回一个没有任何前缀的视图名称,它是否被视为转发? 【参考方案1】:

redirect 将响应状态设置为 302 [1],并在 Location 标头中设置新的 url,并将响应发送到浏览器。然后浏览器根据http规范,再次请求新的url

转发完全在服务器上进行。 servlet 容器只是将相同的请求转发到目标 url,而浏览器并不知道这一点。因此,您可以在处理新 url 时使用相同的请求属性和相同的请求参数。并且浏览器不会知道 url 发生了变化(因为它完全发生在服务器上)


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

【讨论】:

For forward 的 url 会改变吗?我读的 url 会保持不变。 是的,它将保持不变,因为浏览器不知道更改【参考方案2】:

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

【讨论】:

【参考方案3】:

重定向:

    用户请求资源。 向用户发送响应。 这不是请求的资源,这是 HTTP 代码 302 的响应,包含请求资源的 URL。 URL 可能与请求的 URL 相同或不同。 客户端浏览器使用新的 URL 再次请求资源,这一次将实际资源发送给用户。

转发:

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

【讨论】:

【参考方案4】:

我听说过关于重定向和转发的有趣解释。想象一下,您需要朋友的一些服务。什么服务都无所谓。假设您的朋友无法帮助您,但知道谁能帮助您。

如果他告诉你:“我不能处理这个,但我知道谁能处理。这是他的电话号码。给他打电话。”

如果他告诉你:“没问题”,他会转发你的请求,并自己打电话给那个人,而不会通知你让另一个人参与处理你的欲望。然后,你的朋友会得到整理你愿望的结果,并传送给你。

【讨论】:

【参考方案5】:

This post 使用一个很好的真实示例对转发与重定向进行了很好的解释。

送牛奶的人来了,要求在你家按月付钱给你。 这里的房子是容器,而你是存在于 容器。奶人是客户端或浏览器。

他要求每月支付给你,这是由他提出的要求 浏览器到资源 A。如果你走进你的房子并询问你的 母亲(同一容器内的另一个资源 B)用于现金和 回来给送奶工,这叫做转发。

如果你让送牛奶的人在你的房间里对你的母亲说话 或者你让送牛奶的人和你在他家的父亲说话 office(不同的域)然后这称为重定向。

【讨论】:

【参考方案6】:

当您转发请求时,

-请求和响应对象被传输。 -url 保持不变。

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

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

【讨论】:

【参考方案7】:
+-------------------------------------------------------------------------+-----------------------------------------------------------------------------+
|                             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                                   |
+-------------------------------------------------------------------------+-----------------------------------------------------------------------------+

【讨论】:

以上是关于JSP转发和重定向之间的区别[重复]的主要内容,如果未能解决你的问题,请参考以下文章

转发和重定向的区别

jsp中转发和重定向的区别!

JSP转发和重定向的区别

请问重定向与请求转发有啥区别?

java中转发和重定向的区别

请求转发和重定向的区别