Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JSP-保留请求属性时重定向_Java_Jsp_Jakarta Ee_Servlets - Fatal编程技术网

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

Java JSP-保留请求属性时重定向,java,jsp,jakarta-ee,servlets,Java,Jsp,Jakarta Ee,Servlets,我有一个基本的登录表单,要求输入用户名和密码。 信息被传递给servlet,但是如果信息无效,我希望servlet重定向回登录页面 此时servlet正在执行以下操作: else{ request.setAttribute("error","Username or password incorrect"); request.getRequestDispatcher("Login.jsp").forward(request, response); } 我需要设置error属性,以

我有一个基本的登录表单,要求输入用户名和密码。 信息被传递给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>
${error}
虽然有效登录没有问题,但无效登录位于
/LoginServlet?user=test&pswd=test
,而我只希望它位于
/login.jsp

我知道这是因为我使用的是
转发
而不是
响应。sendRedirect
(我使用它进行有效登录),但使用后者会导致我失去
错误
属性


还有其他解决办法吗?

是的,有解决办法,但需要额外的功能。您所描述的内容称为闪存示波器。我们希望保留一个属性,以便它在下一个请求中可用。这通常是在后重定向获取场景中完成的

ServletAPI没有这样的功能,所以我们必须自己实现它。如前所述,您可以使用
过滤器执行此操作


基本上,您可以在第一次请求时将该属性添加到
HttpSession
。在下一步中,您将它从
HttpSession
复制到
HttpServletRequest
属性中,并从
HttpSession
中清除它,您的前向与实际重定向断言以及请求属性的有限范围是正确的。您可以将错误内容设置为会话属性,这将允许您在重定向时从Login.jsp引用它,但现在您又遇到了一个问题,即在使用它呈现Login.jsp时清除它。这并不可怕,但只是你需要记住做的另一件事


岩石,坚硬的地方。错误案例中的URL不是Login.jsp的问题是什么?

URL的问题是显示密码,这是我试图避免的主要问题。啊!那么,也许会议的事情并没有那么糟糕。或者重定向到Login.jsp,传递错误=Username+或+password+不正确,因为参数URL返回404