java - JSP - 重定向同时保留请求属性

标签 java jsp jakarta-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 属性。

还有这方面的事情吗?

最佳答案

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

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

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

关于java - JSP - 重定向同时保留请求属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21314159/

相关文章:

java - 在 JSP 中获取 Map<String, List<String>> 中列表的第一个元素

java - 如何使用java计算远程机器的磁盘空间?

java - Java 的 SAAS 框架

java - 你如何在android中制作一个可调整大小的矩形来裁剪图像?

java - 如何在专门的子类中坚持 DRY 原则?

java - 在不传递 Class<T> 参数的情况下找出 T.class

java - 即使正确也不下载依赖项

javascript - Spring MVC Js 和 css 不加载

java - 使用jsp页面导入时Cannot Find Symbol错误

java - 检查 JSTL 中的对象是否是新的