JSP - 在保持请求属性的同时重定向

时间:2014-01-23 16:39:23

标签: java jsp java-ee servlets

我有一个基本的登录表单,要求输入用户名和密码。 信息传递给servlet,但如果它无效,我希望servlet重定向回登录页面。

目前servlet正在执行此操作:

else{
    request.setAttribute("error","Username or password incorrect");
    request.getRequestDispatcher("Login.jsp").forward(request, response);
}

我需要设置error属性,以便在用户重定向到那里时我可以在登录页面上发出警报:

<div style="color: red">${error}</div>

虽然有效登录是正常的,但/LoginServlet?user=test&pswd=test上有无效的登录,而我希望它只是坐在/Login.jsp

我知道这是因为我使用的是forward而不是response.sendRedirect(我将其用于有效登录),但使用后者会导致我失去error属性

到底有没有?

2 个答案:

答案 0 :(得分:3)

是的,有一种解决方法,但它需要额外的功能。您所描述的内容称为Flash Scope。我们希望保留一个属性,以便在下一个请求中可用。这通常在POST-REDIRECT-GET场景中完成。

Servlet API没有这样的功能,所以我们必须自己实现它。您可以使用here所述的Filter来完成此操作。

基本上,您在第一次请求时将属性添加到HttpSession。在下一个,您将其从HttpSession复制到HttpServletRequest属性,并从HttpSession清除它。

答案 1 :(得分:0)

您对正向与实际重定向的断言以及请求属性的有限范围是正确的。您可以将您的错误事件设置为Session属性,这将允许您从重定向上的Login.jsp引用它,但是现在您在使用它来呈现Login.jsp时还有一个清除它的问题。它并不可怕,但只是你需要记住的另一件事。

岩石,坚硬的地方。在错误情况下URL不是Login.jsp的问题是什么?