Как эффективно уничтожить "сеанс" в 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. поработайте с перенаправленной страницей и активностью сеанса.