Что находится выше уровня сессии (HttpSession) в иерархии контейнеров Java EE/Jakarta EE?

«Что находится выше уровня сессии (HttpSession) в иерархии контейнеров Java EE/Jakarta EE?» — вопрос из категории Hibernate, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В архитектуре Java EE/Jakarta EE веб-приложения, сессия (HttpSession) находится в контексте веб-контейнера (например, Tomcat, Jetty). Над ней в иерархии располагаются:

  1. Контекст сервлета (ServletContext) — объект, общий для всех сессий и сервлетов в рамках одного веб-приложения (файл WAR). В нем хранится общедоступная информация на уровне приложения.
  2. Сам веб-контейнер, который управляет жизненным циклом ServletContext, HttpSession и отдельных Servlet.

Иерархия (сверху вниз):

  1. Веб-контейнер (Tomcat) -> 2. ServletContext (на уровне приложения WAR) -> 3. HttpSession (на уровне пользователя) -> 4. ServletRequest/ServletResponse (на уровень одного HTTP-запроса).

Пример получения контекста из сессии:

// В сервлете или фильтре
HttpSession session = request.getSession();
ServletContext applicationContext = session.getServletContext(); // Контекст приложения

// В ServletContext можно сохранять глобальные атрибуты
applicationContext.setAttribute("APP_NAME", "MyEnterpriseApp");

Примечание для Spring: В Spring Framework аналогом ServletContext является ApplicationContext (корневой контекст приложения Spring), но это абстракция фреймворка, а не часть спецификации Java EE.