关于Session的监听器怎么用的呢,最好能有事例的代码,小弟不盛感激!!!

解决方案 »

  1.   

    session监听器,用于统计在线人数
    1。登陆时假设登陆名loginINFO[0],建立session记录登陆名字。if(rs_login.next()){
               Login_servlet.logger.info("登陆验证成功");//log4j
                 OnLineUser OLU=new OnLineUser();//
               if (!OLU.existUser(loginINFO[0])){
                  Login_servlet.logger.info("重复登陆");
            return;
                         
                    }else{
                          session.setMaxInactiveInterval(3000); //session的生命周期
                            session.setAttribute(loginINFO[0],OLU);
                           
                   
                    }2.监听器代码:OnLineUserpackage cn.wst.common.onLine;import javax.servlet.http.HttpSessionBindingEvent;
    import javax.servlet.http.HttpSessionBindingListener;
      import org.apache.log4j.Logger;
    import java.util.*;
    /**
     * @author wangshangting
     *
     * 目的:
     * 用于统计在线人数,防止统一帐号登陆,退出取消账号
     */
    public class OnLineUser implements HttpSessionBindingListener{
    // private static OnLineUser instance = null;// synchronized public static OnLineUser getInstance()//singleton模式,确保只有一个OnLineUser实例
    // {
    // if( instance == null )
    // {
    // instance = new OnLineUser();
    // }
    // return instance;
    // }    
        
        static Logger logger = Logger.getLogger(OnLineUser.class.getName());
        public OnLineUser(){
        }    private static Vector users=new Vector(); //静态变量!!!!!!!!!!!!
        private int i=1;
        public int getCount(){
          
                users.trimToSize();
        
                return users.capacity();
        }
        public boolean existUser(String userName){
                users.trimToSize();
                boolean existUser=true;
                for (int i=0;i<users.capacity();i++ )
                {
                        if (userName.equals((String)users.get(i)))
                        {
                                existUser=false;
                                OnLineUser.logger.info(users.get(i));
                                OnLineUser.logger.info("重复");
                                break;
                        }
                }
                return existUser;
        }    
        public boolean deleteUser(String userName) {
            OnLineUser.logger.info("移除开始!!");
                users.trimToSize();
          
                if(!existUser(userName)){
                        int currUserIndex=-1;
                        for(int i=0;i<users.capacity();i++){
                                if(userName.equals((String)users.get(i))){
                    // OnLineUser.logger.info("找到");
                                        currUserIndex=i;
                                        break;
                                }
                        }
                        if (currUserIndex!=-1){
                             OnLineUser.logger.info("移除:"+currUserIndex);
                                users.remove(currUserIndex);
                                users.trimToSize();
                                return true;
                        }
                        
                }
                return false;
        }    public Vector getOnLineUser()
        {
                return users;
        }
        
            public void valueBound(HttpSessionBindingEvent e) {
                users.trimToSize();
        
                        users.add(e.getName());                    
                        OnLineUser.logger.info(e.getName()+"\t 登入到系统\t"+(new Date()));
                        OnLineUser.logger.info("第"+i+"进入");
                        i++;
             
                        for(int i = 0;i < users.size();i++){
                            OnLineUser.logger.info(""+i+":"+users.get(i));
                        }
                      
                        System.out.println(" 在线用户数为:"+getCount());
                        
               }
     
                    
            /**
             *
             */
            public void valueUnbound(HttpSessionBindingEvent e) {
                users.trimToSize();
                String userName=e.getName();            deleteUser(userName);            OnLineUser.logger.info(userName+"\t 退出系统\t"+(new Date()));
                OnLineUser.logger.info(" 在线用户数为:"+getCount());
            }
    }
    3. 要记得在web.xml的所有servlet之前生命 OnLineUser,<listener>
     <listener-class>cn.wst.common.onLine.OnLineUser </listener-class>
     </listener >文章出处:http://www.theserverside.com/discussions/thread.tss?thread_id=34076
      

  2.   

    Session的监听器,这个就是在Global.asax 中,添<%@ Application Language="C#" %><script runat="server">    void Application_Start(object sender, EventArgs e) 
        {
            // 在应用程序启动时运行的代码    }
        
        void Application_End(object sender, EventArgs e) 
        {
            //  在应用程序关闭时运行的代码    }
            
        void Application_Error(object sender, EventArgs e) 
        { 
            // 在出现未处理的错误时运行的代码    }    void Session_Start(object sender, EventArgs e) //来一个监听一个,
        {
            // 在新会话启动时运行的代码    }    void Session_End(object sender, EventArgs e) //走一个监听一个
        {
            // 在会话结束时运行的代码。 
            // 注意: 只有在 Web.config 文件中的 sessionstate 模式设置为
            // InProc 时,才会引发 Session_End 事件。如果会话模式设置为 StateServer 
            // 或 SQLServer,则不会引发该事件。    }
           
    </script>
      

  3.   

    有哪位大哥能说下过程思路呢,比如:Session的监听功能要引用哪些接口等等!