我正在使用的Servlet有一个变量session
。
我已经尝试了session.invalidate();
,这似乎已经破坏了会话但是当我像response.sendRedirect("restanes.jsp");
那样进行重定向时,它会在此行中出现HTTP Status 500
错误:
java.lang.IllegalStateException: getAttribute: Session already invalidated
这是预料到的,因为我试图破坏会话。
但是为什么页面无法重定向?在其他地方的同一页上,我已成功重定向。
如何成功销毁会话和重定向?
代码段:
if(request.getParameter("logout") != null ){
session.invalidate();
response.sendRedirect("restanes.jsp");
}
更新:
我需要做的只是在return;
之后response.sendRedirect("restanes.jsp");
。真诚地感谢BalusC
。
答案 0 :(得分:39)
您需要在发送重定向后从方法返回。
if (request.getParameter("logout") != null) {
session.invalidate();
response.sendRedirect("restanes.jsp");
return; // <--- Here.
}
否则代码将继续运行并在块中进一步向下触发一些session.getAttribute()
方法,从而导致此异常。至少,这是迄今为止所描述的问题的最可能原因,并且基于这是一个非常常见的启动器错误的事实。另见例如this answer
答案 1 :(得分:0)
您的代码没问题
if(request.getParameter("logout") != null )
{
session.invalidate();
response.sendRedirect("restanes.jsp");
}
但请确保重定向页面不包含任何会话属性。来自&#34; restanes.jsp&#34;的500内部错误页。 解决重定向页面和会话活动。