Различия между атрибутами в запросе, сеансе и ServletContext [дубликат]

этот вопрос уже есть ответ здесь:

У меня возникли проблемы с пониманием различий между этими 3 способами установки атрибутов:

// String as attribute of request
req.setAttribute("name", "Sluggo");

// Integer as attribute of session
req.getSession().setAttribute("age", 10);

// Date as attribute of context
getServletContext().setAttribute("today", new Date());
  1. каковы различия?
  2. когда вы должны использовать каждый?

2 ответов


все три имеют различные области,

атрибут запроса живет для этого цикла ответа запроса,

атрибут сеанса для этого сеанса,

servletContext находится в контексте сервлета, и он живет, пока контекст не будет уничтожен


A ServletContext атрибут-это объект, привязанный к контексту через ServletContext.setAttribute() метод и который доступен для всех сервлетов (таким образом, JSP) в этом контексте или для других контекстов через getContext() метод. По определению атрибут контекста существует локально в виртуальной машине, где они были определены. Таким образом, они недоступны в распределенных приложениях.

сессии атрибуты привязаны к сеансу, как средство предоставления состояния набору связанных HTTP запросы. Атрибуты сеанса доступны только тем Сервлетам, которые присоединяются к сеансу. Они также недоступны для разных JVMs в распределенных сценариях. Объекты могут быть уведомлены, когда они привязаны/несвязаны к сеансу, реализующему HttpSessionBindingListener интерфейс.

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

В РЕЗЮМЕ, можно сказать что:

  • контекст атрибуты предназначены для инфраструктуры, например общих пулов соединений.
  • сессии атрибуты предназначены для контекстной информации, такие как идентификация пользователя.
  • запрос атрибуты предназначены для конкретной информации запроса, такой как результаты запроса.

источник: сервлеты интервью вопросы Кришна Шринивасан @ javabeat.net