TGViewer
Java | Вопросы собесов Java | Вопросы собесов @easy_java_ru · 11.3K subscribers
Post #417 4.26K
📌 Как уведомить объект в сессии, что сессия недействительна или закончилась ?

💬 Спросят с вероятностью 6%

Предоставляется возможность уведомления объектов, находящихся в сессии, о том, что сессия становится недействительной или заканчивается. Для этого объекты могут реализовывать интерфейс HttpSessionBindingListener или HttpSessionListener.

Использование HttpSessionBindingListener

Позволяет объектам узнавать, когда они добавляются или удаляются из сессии.

Методы интерфейса HttpSessionBindingListener

➕ valueBound(HttpSessionBindingEvent event): Вызывается, когда объект добавляется в сессию.

➕ valueUnbound(HttpSessionBindingEvent event): Вызывается, когда объект удаляется из сессии или когда сессия становится недействительной.

import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionBindingListener;

public class MySessionObject implements HttpSessionBindingListener {

@Override
public void valueBound(HttpSessionBindingEvent event) {
// Код, который выполняется при добавлении объекта в сессию
System.out.println("Object bound to session: " + event.getSession().getId());
}

@Override
public void valueUnbound(HttpSessionBindingEvent event) {
// Код, который выполняется при удалении объекта из сессии или при завершении сессии
System.out.println("Object unbound from session: " + event.getSession().getId());
}
}


Добавление объекта в сессию
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;

@WebServlet("/addObject")
public class AddObjectServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
HttpSession session = request.getSession();
MySessionObject myObject = new MySessionObject();
session.setAttribute("myObject", myObject);
response.getWriter().println("Object added to session.");
}
}


Использование HttpSessionListener

Позволяет отслеживать события создания и уничтожения сессии на уровне приложения.

Методы интерфейса HttpSessionListener

➕ sessionCreated(HttpSessionEvent se): Вызывается при создании сессии.
➕ sessionDestroyed(HttpSessionEvent se): Вызывается при уничтожении сессии.

import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

@WebListener
public class MySessionListener implements HttpSessionListener {

@Override
public void sessionCreated(HttpSessionEvent se) {
// Код, который выполняется при создании новой сессии
System.out.println("Session created: " + se.getSession().getId());
}

@Override
public void sessionDestroyed(HttpSessionEvent se) {
// Код, который выполняется при завершении сессии
System.out.println("Session destroyed: " + se.getSession().getId());
}
}


Регистрация слушателей

Если вы не используете аннотации, вы можете зарегистрировать слушателей в файле web.xml.
<web-app ...>
<listener>
<listener-class>com.example.MySessionListener</listener-class>
</listener>
</web-app>


Чтобы уведомить объект в сессии о том, что сессия стала недействительной или закончилась, объект может реализовывать интерфейс HttpSessionBindingListener. Для отслеживания событий создания и уничтожения сессий на уровне приложения используется интерфейс HttpSessionListener. Оба интерфейса позволяют выполнять необходимые действия при изменении состояния сессий и управлять ресурсами эффективно.

🔥 ТОП ВОПРОСОВ С СОБЕСОВ

🔒 База собесов | 🔒 База тестовых
  • 👍 10
  • ❤ 1
  • 👾 1
More from @easy_java_ru
  1. Oct 11, 2026🤔 Чем отличается where от having ? WHERE и HAVING используются для фильтрации записей, но…
  2. Oct 10, 2026🤔 На основании какой структуры данных реализован ArrayList? ArrayList реализован на базе…
  3. Oct 9, 2026🤔 Что такое «HTML»? HTML (HyperText Markup Language) — это язык разметки, используемый дл…
  4. Oct 9, 2026🤔 В чём различие между LeftJoin , RightJoin и InnerJoin? LEFT JOIN, RIGHT JOIN и INNER JO…
  5. Oct 8, 2026🤔 Что такое поток "демон"? Демон-поток — это поток, который: - Работает на фоне (например…
  6. Oct 7, 2026🤔 Может ли Entity-класс быть абстрактным? Да, Entity может быть абстрактным, если он служ…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →