Как вызвать метод до уничтожения объекта сеанса? - PullRequest
18 голосов
/ 13 октября 2011

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

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

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

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

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

1 Ответ

37 голосов
/ 13 октября 2011

Да, это возможно.Вы можете использовать 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() или вследствие недействительности / истечения срока действия сеанса).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...