能不能把你那个实现sessionListener接口的类的代码贴出来看看

解决方案 »

  1.   

    package bean.include;import java.io.*;
    import java.util.*;
    import javax.servlet.*;
    import javax.servlet.http.*;
    import javax.servlet.http.HttpSession;
    import org.DbConn;
    import bean.include.OutString;//监听登录的整个过程
    public class SessionListener implements HttpSessionBindingListener
    {
            public  String privateInfo=""; //生成监听器的初始化参数字符串
            private String logString="";  //日志记录字符串
            private int count=0;          //登录人数计数器
            private String userId="";     //用户ID
            private String sessionId="";  //SessionId
            private String flag="";       //标志位
            private String Sql="";
            private String remoteHost="";
            private String time="";
            public  DbConn dc2;
            public  OutString os=null;
            public  HttpSession session = null;        public HttpSession getSession()
            {
                 return this.session;
            }
            public void setSession(HttpSession seion)
            {
                 this.session = seion;
            }        public String getUserId()
            {
                 return this.userId;
            }
            public void setUserId(String id)
            {
                 this.userId=id;
            }        public String getRemoteHost()
            {
                 return this.remoteHost;
            }
            public void setRemoteHost(String ip)
            {
                 this.remoteHost=ip;
            }        public String getFlag()
            {
                 return this.flag;
            }
            public void setFlag(String flag)
            {
                 this.flag=flag;
            }        public String getSessionId()
            {
                 return this.sessionId;
            }
            public void setSessionId(String sessionId)
            {
                 this.sessionId=sessionId;
            }        public SessionListener()
            {
                // this.privateInfo=info;
            }        public int getCount()
            {
                 return count;
            }        public void creSession(HttpServletRequest request) throws ServletException, IOException
            {
                 session = request.getSession(true);
            }        public void valueBound(HttpSessionBindingEvent event)
            {
                 os = new OutString();
                 this.time=os.getOracleDate();
                 if(this.flag == "" || this.flag == null)
                    this.Sql="insert into T_onLineUserInfo values('"+this.userId+"','"+this.remoteHost+"',to_date('"+this.time+"','YYYY-MM-DD,HH24:MI:SS'),to_date('"+this.time+"','YYYY-MM-DD,HH24:MI:SS'),'0')";
                 else
                   this.Sql ="update T_onLineUserInfo set F_Remote_Host='"+this.remoteHost+"',F_flag='0',F_login_time=to_date('" +this.time + "','YYYY-MM-DD,HH24:MI:SS') where F_ID='" +this.userId + "'";
                updateSql(this.Sql);
            }        public void updateSql(String sql)
            {
                try
                {
                     dc2 = new DbConn();
                     dc2.executeUpdate(sql);
                     dc2.Commit();
                }
                catch(Exception e)
                {
                     System.out.println("SessionListener:updateSql()   ="+e);
                }
                finally
                {
                     dc2.Close();
                }
            }        public void valueUnbound(HttpSessionBindingEvent event)
            {
                 this.session.removeAttribute("listener");
                 this.Sql="update T_onLineUserInfo set F_flag='1',F_exit_time=to_date('"+this.time+"','YYYY-MM-DD,HH24:MI:SS') where F_ID='"+this.userId+"'";
                 updateSql(this.Sql);
            }
    }
      

  2.   

    呵呵,我看了几句就知道问题了
    你不应该实现HttpSessionBindingListener接口
    而应该实现HttpSessionListener接口和其中的sessionCreated()和sessionDestroyed()的方法第一个接口是用来和你这个类绑定的,当你这个类被垃圾回收的时候就会调用valueUnbound()方法,你的问题就在这
      

  3.   

    public class SessionListener implements HttpSessionBindingListener,java.io.Serializable{
    .........
    }
      

  4.   

    楼上的这么一说我就没底了
    我想请教一下实现java.io.Serializable是什么作用
    而他这代码为什么是这个问题?
    真心求教!谢谢
      

  5.   

    jFresH_MaN,你好!针对你所说的,我贴出来的代码是否只需做如下修改:
        1.将HttpSessionBindingListener改为HttpSessionListener 
        2.将valueBound()改为sessionCreated()
        3.将valueUnbound()改为sessionDestroyed()
        4.将HttpSessionBindingEvent 改为HttpSessionEvent 
        请赐教!
      

  6.   

    你试试吧,我是这么想的
    但我看楼上那个星的东东贴的好象也有道理
    因为报错有一句tried to place an on-serializable attribute
      

  7.   

    stonecsdn,你好!你所说的方法已解决我程序中存在的问题,非常感谢!