2

如果 url 在他们自己的 web 应用程序中,为什么人们必须重定向?为什么在 Spring 中人们从 Controller 的处理程序方法重定向到同一控制器中的另一个处理程序方法?我听说重定向是基于浏览器的。这就像向浏览器发送请求以向另一个 URL 发送请求。虽然 forward 是有意义的,因为它在(spring mvc)应用程序中使用,因此浏览器窗口上的 URL 保持不变。

但是,当您可以简单地发送视图名称或在需要时使用 forward 时,使用 redirect:/url 是不是很英勇。

4

3 回答 3

8

Using the redirect prefix in your controller will generate a HTTP response with the 302 status code and the location header pointing to the redirection URL. The browser will then redirect to that URL (model exposed in the first request will be lost, and the browser URL will be the second one).

Using the forward prefix, the forward will be done internally by the servlet, so there's no need of a second request (URL will remain the same). The forward prefix should only be used in requests that can be safely repeated by the browser. That's not the case when you send a form which changes the database state (reloading the browser will lead to duplicate submissions). In these cases you should use redirect and apply the POST-redirect-GET pattern. Please refer to http://en.wikipedia.org/wiki/Post/Redirect/Get

于 2013-09-07T12:31:32.063 回答
2

如果没有特定的上下文,很难告诉你为什么有人会在执行处理程序后使用重定向的所有原因。

在某些情况下,处理程序处理后的重定向(例如 POST 后)被认为是所需的设计模式 - POST/Redirect/GET

一个常见问题是使用 POST 方法提交的重复表单。通过在处理表单后使用重定向,应用程序可以在很大程度上阻止用户点击刷新并重新提交表单 - 因为他们现在位于新重定向的 url。

于 2013-09-07T12:28:39.627 回答
0

我们进行重定向而不是转发到页面,因为我们希望将重定向后发布模式应用于我们的表单提交。

使用此模式,成功的表单提交会发出 HTTP 重定向,以避免在用户重新加载页面或为页面添加书签时重新提交。

于 2017-10-17T20:09:05.037 回答