我有一个基本的登录表单,要求输入用户名和密码。 该信息被传递到 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
属性。
还有这方面的事情吗?
最佳答案
是的,有一个解决方法,但它需要额外的功能。你所描述的就是所谓的Flash Scope。我们希望保留一个属性,以便它在下一个请求中可用。这通常在 POST-REDIRECT-GET 场景中完成。
Servlet API 没有这样的功能,所以我们必须自己实现它。您可以使用 Filter
来完成此操作,如 here 中所述。 .
基本上,您可以在第一个请求时将该属性添加到 HttpSession
中。在下一个中,您将其从 HttpSession
复制到 HttpServletRequest
属性中,并将其从 HttpSession
中清除。
关于java - JSP - 重定向同时保留请求属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21314159/