Как эффективно уничтожить "сеанс" в Java-сервлете?

сервлет я работаю имеет переменную 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.

2 ответов


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

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

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


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

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

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