Java Platform, Enterprise Edition (Java EE) 8
Учебник по Java EE

Назад Вперёд Содержание

Поддержка состояния клиента

Многие приложения требуют, чтобы ряд запросов от клиента был связан друг с другом. Например, веб-приложение может сохранять состояние корзины покупок пользователя по запросам. Веб-приложения отвечают за поддержание такого состояния, называемого сессией, поскольку HTTP не имеет состояния. Для поддержки приложений, которым необходимо сохранять состояние, технология Java Servlet предоставляет API для управления сессиями и предоставляет несколько механизмов для реализации сессий.

Доступ к сессии

Сессии представлены объектом HttpSession. Вы получаете доступ к сессии, вызывая метод getSession объекта запроса. Этот метод возвращает текущую сессию, связанную с этим запросом. Или, если в запросе нет сессии, этот метод создаёт её.

Связывание объектов с сессией

Вы можете связать атрибуты значений-объектов с сессией по имени. Такие атрибуты доступны любому веб-компоненту, который принадлежит одному и тому же веб-контексту и обрабатывает запрос, являющийся частью одной и той же сессии.

Напомним, что ваше приложение может уведомлять объекты веб-контекста и слушателя сессии о событиях жизненного цикла сервлета (Обработка событий жизненного цикла сервлета). Вы также можете уведомлять объекты об определённых событиях, связанных с сессией, таких как следующие.

  • Когда объект добавляется в сессию или удаляется из неё. Чтобы получить это уведомление, ваш объект должен реализовать интерфейс javax.servlet.http.HttpSessionBindingListener.

  • Когда сессия, с которой связан объект, активируется или деактивируется. Сессия будет активирована или деактивирована, когда она перемещается между виртуальными машинами или сохраняется и восстанавливается из персистентного хранилища. Чтобы получить это уведомление, ваш объект должен реализовать интерфейс javax.servlet.http.HttpSessionActivationListener.

Управление сессиями

Поскольку HTTP-клиент не может сигнализировать о том, что ему больше не нужна сессия, каждая сессия имеет тайм-аут, чтобы её ресурсы могли быть освобождены. Значение тайм-аута можно получить и изменить с помощью методов сессии getMaxInactiveInterval и setMaxInactiveInterval.

  • Чтобы гарантировать, что время активной сессии не истекло, вы должны периодически получать доступ к сессии, используя сервисные методы, поскольку это сбрасывает счётчик времени простоя сессии.

  • Когда конкретное взаимодействие с клиентом завершено, вы можете использовать метод invalidate сессии, чтобы аннулировать сессию на стороне сервера и удалить все данные сессии.

Установка тайм-аута с IDE NetBeans

Чтобы установить период ожидания в дескрипторе развёртывания с IDE NetBeans, выполните следующие действия.

  1. Откройте проект, если вы ещё этого не сделали.

  2. Разверните узел вашего проекта на вкладке Проекты.

  3. Разверните веб-страницы и узлы WEB-INF, которые находятся под узлом проекта.

  4. Выполните двойной клик на web.xml.

  5. Нажмите Общие в верхней части редактора.

  6. В поле Session Timeout введите целочисленное значение.

    Целочисленное значение представляет количество минут бездействия, которое должно пройти до истечения тайм-аута сессии.

Отслеживание сессии

Чтобы связать сессию с пользователем, веб-контейнер может использовать несколько методов, каждый из которых включает передачу идентификатора между клиентом и сервером. Идентификатор может храниться на клиенте в виде файла cookie, или веб-компонент может включать идентификатор в каждый URL, который возвращается клиенту.

Если ваше приложение использует объекты сессии, вы должны убедиться, что отслеживание сессии включено, если приложение перезаписывает URL каждый раз, когда клиент отключает использование файлов cookie. Это можно сделать, вызвав метод ответа encodeURL(URL) для всех URL, возвращаемых сервлетом. Этот метод включает идентификатор сессии в URL только если cookies отключены. В противном случае метод возвращает URL без изменений.


Назад Вперёд Содержание
Логотип Oracle  Copyright © 2017, Oracle и/или её дочерних компаний. Все права защищены. Версия перевода 1.0.5 (Java EE Tutorial — русскоязычная версия)