Это не исключение Nullpointer.
Это исключение из незаконного государства.
Это происходит, когда сеанс был признан недействительным / истек и вы пытаетесь получить к нему доступ.
Сессия становится недействительной следующим образом.
session.invalidate();
После вызова функции invalidate сеанс нельзя использовать.
Сессия истекает по истечении времени ожидания. После истечения срока действия, если вы попытаетесь использовать его, он выдаст то же исключение.
Это способы, которыми вы можете вручную установить время ожидания.
установить время ожидания в web.xml. Это устанавливается в минутах.
<session-config>
<session-timeout>30</session-timeout>
</session-config>
Или вы также можете установить его в Java.
public void setMaxInactiveInterval(int interval)
session.setMaxInactiveInterval(30*60); // This we set in seconds.
Здесь мы указываем время в секундах между клиентскими запросами, прежде чем контейнер сервлета аннулирует этот сеанс. Отрицательное время означает, что сеанс никогда не должен прерываться.
Убедитесь, что выполняемая операция не занимает больше времени, чем время ожидания. В противном случае вам придется сбросить значение.
EDIT:
Невозможно восстановить его чистым способом. Сеанс будет признан недействительным / непригодным для использования, и вам нужно будет создать новый сеанс и повторно заполнить данные.
Обычно люди перенаправляются на альтернативную страницу ошибок вместо отображения трассировки стека. «Ваша сессия истекла. Пожалуйста, войдите снова.»
Используйте request.isRequestedSessionIdValid (), чтобы определить, действителен ли ID сеанса.
HttpSession session =httpReg.getSession(false);
if( !request.isRequestedSessionIdValid() )
{
//comes here when session is invalid.
// redirect to a clean error page "Your session has expired. Please login again."
}
Другой вариант - использовать дескриптор IllegalExceptionState с помощью try catch
HttpSession session =httpReg.getSession(false);
try
{
if(session != null)
{
Date date = new Date(session.getLastAccessedTime());
}
}
catch( IllegalStateException ex )
{
//comes here when session is invalid.
// redirect to a clean error page "Your session has expired. Please login again."
}
Боковое примечание:
Если у вас есть процесс, выполнение которого занимает много времени, а время сеансов истекает (например: анализ действительно больших записей данных).
Вам следует рассмотреть возможность удаления их из веб-приложения и использовать простой Java для запуска их как процесса.