Session 处置会话对象

Session 处置会话对象,session,struts2,server-side,dispose,Session,Struts2,Server Side,Dispose,是否可以在struts2中处置存储在会话中的对象 我希望存储在会话中的某些对象具有需要释放的资源,但我找不到在会话超时或关闭时干净地处置这些资源的方法 我意识到基于客户端的解决方案需要一个javascript定时器,但我现在并不担心客户端。我只想在会话超时时清理服务器端的资源 我曾考虑过在每个请求上检查会话(复数,因为可能有许多与不同客户机并发的会话)并执行后期清理,但此时会话映射已经不存在了。从一位同事那里找到了答案。谢谢你的建议 解决方案似乎是创建一个实现HttpSessionListene

是否可以在struts2中处置存储在会话中的对象

我希望存储在会话中的某些对象具有需要释放的资源,但我找不到在会话超时或关闭时干净地处置这些资源的方法

我意识到基于客户端的解决方案需要一个javascript定时器,但我现在并不担心客户端。我只想在会话超时时清理服务器端的资源


我曾考虑过在每个请求上检查会话(复数,因为可能有许多与不同客户机并发的会话)并执行后期清理,但此时会话映射已经不存在了。

从一位同事那里找到了答案。谢谢你的建议

解决方案似乎是创建一个实现HttpSessionListener的类。此接口包含在创建和销毁会话时调用的函数。然后添加:

<listener>
    <listener-class>my.package.listeners.TestSessionListener</listener-class>
</listener>

my.package.listeners.TestSessionListener

到web.xml或您的servlet配置文件。

会话是应用程序服务器关心的问题,因此没有实际的方法来处理会话,我也不建议尝试这样做。我认为会话中应该存储很少的内容,足以在需要时从其他来源查找所需的内容。假设会话中设置了一个用户对象,只需从会话映射中删除该对象,GC就会处理它。我错过了清理方面。如果分配需要特别清理,那么会话肯定是错误的。您的服务层是正确的位置,我认为您需要实现另一个计时系统,quartz有很多优点。您将创建一个拦截器,它将重置该用户的计时器,当计时器过期时,您现在可以正确地进行清理。嗯。。。如果会话超时,则会话将消失。如果该会话中有对象,并且没有其他对象包含对该对象的引用,那么这些对象就已经符合GC的条件,无需任何干预。还有会话侦听器。我不明白您需要完成什么。顺便说一下,我建议从会话中删除需要特殊清理的对象,这些对象在会话超时时自动GC无法处理。相反,为该对象存储一个标识符(没有附加任何可以删除的字符串,没有任何副作用)@Jensen Ching:我认为你的思路是正确的。我将把依赖于状态/资源的对象存储在其他地方,并将标识符放在会话中。我发现HttpSessionListener应该是我需要知道会话何时被破坏的钩子。在这两者之间,我应该能够在会话结束时清理资源。谢谢