会话对象销毁之前如何调用方法?

克里斯蒂安(Cristian D'Aloisio):

开发JSP应用程序时,可以定义会话超时值,例如30分钟。

超时之后,会话对象将被销毁。此外,我可以通过编程使调用session.invalidate()的会话无效。

由于我是在HTTP会话中保存一个复杂的Java对象,因此在使会话无效或让它在tomcat应用服务器中过期之前,我需要调用一个保存的对象方法来释放一些内存。当然,当用户单击注销按钮时,我可以以编程方式进行操作。

我想做的是在Tomcat应用程序服务器破坏所有过期的会话(30分钟或自定义会话)时拦截它,以便我可以预处理保存在会话中的Java对象,从而调用特定的方法来释放内存。

可能吗?

BalusC:

是的,那是可能的。您可以使用方法来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()的无效还是由会话的无效/过期显式删除)都将调用该方法

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章