20

私が取り組んでいるサーブレットには変数があります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 に答える