关于HttpSession耗用内存和有效地销毁HttpSession对象的问题

HttpSession对象虽然有用,但消耗大量内存。当不再需要时,应及时调用invalidate方法销毁。在Struts应用中,即使表单验证失败,也会创建HttpSession对象存储用户信息。为避免不必要的内存占用,可以编写专门的动作类调用invalidate方法。同时,通过JavaScript的onunload事件,可以在用户关闭浏览器时尝试销毁HttpSession,但这依赖于浏览器的JS支持。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

HttpSession对象很有用,但它们耗用的内存也委多, 因此当你不在需要用到某个HttpSession对象的时候,你应该尽早调用它的invalidate方法来销毁它。在这里大部分网站会向用户入境问俗一个用来退出登录的链接,但可惜的是点击这个链接的用户没有几个,大部分用户会直接关闭浏览器。等待HttpSession对象自然死亡意味着放任它们继续占用你宝贵的内存。下面说说在struts应用程序中如何销毁不再使用的HttpSession对象的方法:

在默认情况下,如果系统里还没有与当前用户相对应的HttpSession对象,STRUTS应用程序的任何一个动作调用都能为该用户创建出一个HttpSession对象来——即使是在系统还没有对任何一个类进行过实例化的情况下(比如说, 在某个表单输入验证失败的时候)也是如此。这是因为 STRUTS需要把用户的地区信息保存到HttpSession对象里。换句话说,如果有个动作将把控制权转交给某个JSP页面,就处你在这个JSP页面里使用了< %@  page session="false"%>指令也来不及一个新的HttpSession对象被创建 出来。

那么我们只有调用这个HttpSession对象的invalidate方法并STRUTS再创建一个新的HttpSession实例!

我们在一个invalidateSession动作类里可以有如下做法:

public  ActionForward execute(ActionMapping mapping ,ActionForm form,ServletRequest request,ServletResponse response) throws  Exception {
HttpSession session
=request.getSession(false);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值