Различия между атрибутами в запросе, сеансе и 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());
- каковы различия?
- когда вы должны использовать каждый?
2 ответов
все три имеют различные области,
атрибут запроса живет для этого цикла ответа запроса,
атрибут сеанса для этого сеанса,
servletContext находится в контексте сервлета, и он живет, пока контекст не будет уничтожен
A ServletContext атрибут-это объект, привязанный к контексту через ServletContext.setAttribute()
метод и который доступен для всех сервлетов (таким образом, JSP) в этом контексте или для других контекстов через getContext()
метод. По определению атрибут контекста существует локально в виртуальной машине, где они были определены. Таким образом, они недоступны в распределенных приложениях.
сессии атрибуты привязаны к сеансу, как средство предоставления состояния набору связанных HTTP запросы. Атрибуты сеанса доступны только тем Сервлетам, которые присоединяются к сеансу. Они также недоступны для разных JVMs в распределенных сценариях. Объекты могут быть уведомлены, когда они привязаны/несвязаны к сеансу, реализующему HttpSessionBindingListener
интерфейс.
запрос атрибуты привязаны к конкретному объекту запроса, и они длятся до тех пор, пока запрос разрешен или пока он продолжает отправляться из сервлета в сервлет. Они используются больше как коммуникация канал между Сервлетами через RequestDispatcher
интерфейс (так как вы не можете добавлять параметры...) и у контейнера. Атрибуты запроса очень полезны в веб-приложениях, когда вы должны предоставить информацию о настройке между поставщиками информации и уровнем представления информации (JSP), который привязан к конкретному запросу и больше не должен быть доступен, что обычно происходит с сеансами без строгой стратегии управления.
В РЕЗЮМЕ, можно сказать что:
- контекст атрибуты предназначены для инфраструктуры, например общих пулов соединений.
- сессии атрибуты предназначены для контекстной информации, такие как идентификация пользователя.
- запрос атрибуты предназначены для конкретной информации запроса, такой как результаты запроса.
источник: сервлеты интервью вопросы Кришна Шринивасан @ javabeat.net