Java 何时使用重定向vs向前

Java 何时使用重定向vs向前,java,redirect,servlets,model-view-controller,forward,Java,Redirect,Servlets,Model View Controller,Forward,我正在阅读一本关于JavaWeb开发最佳实践的网页指南,我看到了一个章节,其中给出了如何在控制器层设计servlet行为的建议 需要指出的是,如果向servlet发出的请求涉及对数据存储的编辑,则必须使用重定向,否则应使用转发到另一个url 虽然我理解重定向和转发之间的区别,但我不知道这在这种情况下有什么关系。换句话说,我看不出与转发相反的重定向如何防止重复的浏览器请求不必要地重复非幂等数据存储操作 当然,在向控制器JSP发出请求后重定向到视图页面会改变URL,但这无助于阻止有意再次访问同一页面

我正在阅读一本关于JavaWeb开发最佳实践的网页指南,我看到了一个章节,其中给出了如何在控制器层设计servlet行为的建议

需要指出的是,如果向servlet发出的请求涉及对数据存储的编辑,则必须使用重定向,否则应使用转发到另一个url

虽然我理解重定向和转发之间的区别,但我不知道这在这种情况下有什么关系。换句话说,我看不出与转发相反的重定向如何防止重复的浏览器请求不必要地重复非幂等数据存储操作

当然,在向控制器JSP发出请求后重定向到视图页面会改变URL,但这无助于阻止有意再次访问同一页面的尝试

如果需要针对错误或不必要的数据库编辑进行保护,我的方法是在控制器层检查,并在必要时重定向到适当的错误页面


请告知。

使用重定向可通过简单刷新或点击后退按钮防止来自浏览器的POST请求被复制,并为用户提供可书签的页面登录。如果使用重定向,则原始编辑请求将丢失,因为您的浏览器将只保留您将被重定向到的url。如果向前,那么所有的导航路径都将出现在历史记录中。您自己已经给出了答案:幂等性(bookmarkability)。当您将浏览器地址栏中的当前URL添加到完全不同的窗口/会话/应用程序中时,您希望网页的行为如何?这与页面刷新时的双重提交无关。正确,但简单地重定向到新页面不会阻止用户在地址栏中输入URL并再次访问它。我知道大多数用户都不是恶意的,不会故意查看源代码并保存“提交”按钮的链接,但这是一种可能性使用重定向可以通过刷新或点击后退按钮防止来自浏览器的POST请求被复制,并为用户提供可设置书签的页面登录。如果使用重定向,则原始编辑请求将丢失,因为浏览器将只保留将重定向到的url。如果向前,那么所有的导航路径都将出现在历史记录中。您自己已经给出了答案:幂等性(bookmarkability)。当您将浏览器地址栏中的当前URL添加到完全不同的窗口/会话/应用程序中时,您希望网页的行为如何?这与页面刷新时的双重提交无关。正确,但简单地重定向到新页面不会阻止用户在地址栏中输入URL并再次访问它。我知道大多数用户不是恶意的,不会故意查看源代码并保存“提交”按钮的链接,但这是可能的