jfy3d(剑事)BLOG

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  40 随笔 :: 0 文章 :: 344 评论 :: 0 Trackbacks

通常监听session并在超时前取到相关信息通过配置Listener由HttpSessionBindingListener来实现

finalize方法是Java垃圾回收类前对该类调用的方法。
所以session超时的时候session里保存的类也就背回收掉,就会触发finalize()

比如有下面一个用户信息类

import java.util.Date;

public class user {
    private String date = new Date().toString();
    public user(){
        System.out.println("create session date="+date);
    }
    public void finalize(){
        System.out.println("回收 session end  date="+date);
    }
}

这里对finalize方法进行了重写

JSP里将user装入session

<%
    if(session.getAttribute("ff")==null){
    session.setMaxInactiveInterval(5);//这里为了测试方便设置超时为5秒
session.setAttribute("ff",new  user());
    }else{
        System.out.println(session.getAttribute("ff"));
    }
%>

测试结果
session超时,过1分钟后user类被回收
没有超时的时候重复装入user 前面装入session的会很快被回收

通过这个特性
也可以通过finalize()来作用户在线时间等一些功能的实现

posted on 2006-07-12 22:49 剑事 阅读(2951) 评论(7)  编辑  收藏 所属分类: 小程序

评论

# re: 监听session超时的另一种方法finalize 2006-07-13 02:23 这招厉害
这招厉害。  回复  更多评论
  

# re: 监听session超时的另一种方法finalize 2006-07-15 09:55 jelly->
finalize不建议你用,可能会有一些预想不到的效果等着你,而且, 你根本不知道jvm什么时候会回收  回复  更多评论
  

# re: 监听session超时的另一种方法finalize 2006-07-15 16:43 剑事
简单测试结果来看回收的时间还是确定的,大量应用就不知道了
我也怀疑会有一些不确定的问题在里面

目前只当个知识点关注一下  回复  更多评论
  

# re: 监听session超时的另一种方法finalize 2006-07-16 19:06 hardson
这种做法完全是错误的。对象回收完全是一个不确定的东西。企图通过finalize来实现业务逻辑,都有可能得到不可预期的结果。finalize只有在极其特殊的情况下才可能用到,才有可能发挥其应有的确切的作用。  回复  更多评论
  

# re: 监听session超时的另一种方法finalize 2006-07-20 18:56 天上下着鱼
胡说八道,虚拟机的行为是不可预测的,
对象可以回收了和GC会将对象回收根本就是两回事,
千万不要把希望寄托在这个之上  回复  更多评论
  

# re: 监听session超时的另一种方法finalize 2006-07-20 21:40 剑事
@天上下着鱼
不用这个是因为有更好的选择

而且和你说的有什么关系
  回复  更多评论
  

# re: 监听session超时的另一种方法finalize[未登录] 2008-08-18 16:59 x
等了两分钟了 没有效果  回复  更多评论
  




标题  
姓名  
主页
验证码 *  
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2006-07-14 22:40 编辑过
 
 
相关链接:
网站导航: