如何在servlet中没有客户端重定向的情况下更改用户浏览器中的URL

时间:2012-01-19 18:27:11

标签: java url servlets redirect forward

我想从一个页面转发到另一个页面,但我想要更改相同的URL。假设用户在这里http://mywebsite/register,当他完成注册过程后,我希望在他的地址栏中http://mywebsite/home

是否可以不使用sendRedirect,我的意思是服务器端转发的方式?或任何其他方式解决这个问题?

2 个答案:

答案 0 :(得分:0)

AFAIK无法绕过重定向,因为浏览器必须在某个时刻更新网址。如果你在加载转发到页面之后更新了网址,它会发出刷新,然后再次加载页面(这可能会导致无限循环)。

为什么你不想在这种情况下使用重定向?

答案 1 :(得分:0)

您可以直接将HTML表单提交到该URL。

<form action="http://mywebsite/home">

但这没有任何意义。在验证失败的情况下,在使用验证消息重新显示相同表单时,您也会遇到问题。如果您打算保留原始URL并且需要在会话范围而不是请求范围中存储消息,则需要重定向回原始页面,因为重定向基本上会创建一个全新的请求。只要最终用户在提交表单后按F5,您就会在没有重定向的情况下运行“双提交”问题。

让servlet将成功的POST请求重定向到所需的URL。这是规范的方法。更重要的是,这是一种推荐的“设计模式”:POST-Redirect-GET pattern