Как эффективно уничтожить "сеанс" в Java 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.

Ответ 1

Вам нужно вернуться из метода после отправки перенаправления.

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

В противном случае код будет продолжать выполняться и удалять некоторый метод session.getAttribute() далее в блоке, вызывая именно это исключение. По крайней мере, это самая вероятная причина проблемы, описанная до сих пор, и основанная на том, что это довольно распространенная ошибка стартера. См. Также, например. этот ответ.

Ответ 2

Ваш код в порядке

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

но убедитесь, что страница перенаправления не содержит атрибутов сеанса. 500 внутренняя ошибка, поступающая со страницы "restanes.jsp". работать с перенаправленной страницей и активностью сеанса.