#java #jsp #servlets
#java #jsp #сервлеты
Вопрос:
Когда сеанс был уничтожен, как мне напечатать сообщение на JSP, которое уведомляет пользователя? Я использую класс, который реализует HttpSessionListener.
Ответ №1:
Когда сеанс уничтожен, вы все равно ничего не сможете сделать со стороны сервера. В момент уничтожения сеанса нет гарантии, что у вас на руках есть действительные объекты запроса / ответа. Лучше всего полностью обработать это на стороне клиента, используя, например, JS. Вы можете получить оставшееся время жизни текущего сеанса с помощью HttpSession#getMaxInactiveInterval()
и вы можете использовать JavaScript setTimeout()
для запуска функции через некоторое время.
<script>
setTimeout(function() {
document.getElementById('message').innerHTML = 'Session has timed out!';
}, ${pageContext.session.maxInactiveInterval} * 1000); // It returns seconds, but setTimeout expects milliseconds.
</script>
<div id="message"></div>
Комментарии:
1. @Op De Cirkel: Вы читали абзац над фрагментом кода? Знаете ли вы лучшие языки на стороне клиента? Не стесняйтесь публиковать ответ, если у вас есть подход получше.
2. @Op, невозможно распечатать сообщение для клиента, когда подобное событие происходит на стороне сервера, потому что при возникновении события клиента нет
3.@BalusC Если вы имеете в виду: Когда сеанс уничтожен, вы все равно ничего не сможете сделать со стороны сервера. Это явно неправильно.Клиент по-прежнему отправляет файл cookie сеанса. Итак, вы можете проверить на сервере, присутствует ли cookie и нет сеанса, тогда время ожидания истекло. Ответ на вопрос где-то рядом.
4. @Op De Cirkel: Для этого требуется запрос после истечения времени ожидания. Я понял, что OP должен немедленно отобразить сообщение. Таким образом, нет средств для запроса.
5. Если бы вы действительно хотели, вы могли бы инициировать вызов AJAX, который проверяет на стороне сервера, существует ли сеанс, но этого решения достаточно для большинства случаев.