20

我正在工作的 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

4

2 回答 2

44

发送重定向后,您需要从该方法返回。

if (request.getParameter("logout") != null) {  
    session.invalidate();
    response.sendRedirect("restanes.jsp");
    return; // <--- Here.
}

否则,代码将继续运行并session.getAttribute()在块中进一步触发某些方法,从而导致此异常。至少,这是迄今为止描述的问题的最可能原因,并且基于这是一个非常常见的初学者错误的事实。另见例如这个答案

于 2012-12-20T12:55:46.127 回答
0

你的代码没问题

if(request.getParameter("logout") != null )
{  
  session.invalidate();
  response.sendRedirect("restanes.jsp");
}

但请确保重定向页面不包含任何会话属性。来自“restanes.jsp”页面的 500 内部错误。解决重定向页面和会话活动。

于 2013-12-19T05:50:14.680 回答