Подтвердить что ты не робот

Как вызвать метод до уничтожения объекта сеанса?

При разработке приложения JSP можно определить значение тайм-аута сеанса, скажем, 30 минут.

После этого тайм-аута объект сеанса уничтожается. Более того, я могу программно аннулировать сеанс вызова session.invalidate().

Так как я сохраняю сложный объект Java внутри сеанса HTTP, прежде чем аннулировать сеанс или позволить ему истечь сервером приложений tomcat, мне нужно вызвать метод сохраненных объектов для освобождения некоторой памяти. Конечно, я могу сделать это программно, когда пользователь нажимает кнопку выхода из системы.

То, что я хотел бы сделать, это перехватить сервер приложений Tomcat, когда он собирается уничтожить все истекшие сеансы (30 минут или обычай), чтобы я мог предварительно обработать объекты Java, сохраненные в сеансе, вызывая специальный метод для выпуска память.

Возможно ли это?

4b9b3361

Ответ 1

Да, это возможно. Вы можете использовать HttpSessionListener и выполнять задание в методе sessionDestroyed(),

@WebListener
public class MyHttpSessionListener implements HttpSessionListener {

    @Override
    public void sessionDestroyed(HttpSessionEvent event) {
        // Do here the job.
    }

    // ...
}

Или вы можете позволить сложному объекту, который был сохранен как атрибут сеанса, реализовать HttpSessionBindingListener и выполните задание в методе valueUnbound().

public class YourComplexObject implements HttpSessionBindingListener {

    @Override
    public void valueUnbound(HttpSessionBindingEvent event) {
        // Do here the job.
    }

    // ...
}

Он будет вызываться всякий раз, когда объект должен быть удален из сеанса (либо явно с помощью HttpSession#removeAttribute(), либо с помощью недействительности/истечения сеанса).