struts问题探讨(不知道低级不低级),求解决方案!
我做一个系统.struts结构. 
 登入时,要记录用户的登入的用户名字信息,并且不允许一个帐号同时多次登入. 
 在其它模块时,实时web显示在线的所有在线的用户.   
 原来的方法: 
 每个用户登入是,将其用户名放在一个静态连表中(后面模块读该表而显示在线用户) 
 退出时,做一个logoutaction,从该连表中清除该用户.   
 由于我为了"不允许一个帐号同时多次登入",在登入时先去查连表有无相同的名字(名唯一),有,则会告之用户已经存在. 
 这样会导致存在以下问题: 
 1)session过期后,没有触发logoutaction事件,静态连表中仍旧有该用户名. 
 再用该帐号登入时将无法登入. 
 2)直接断线 
 3)关闭按纽,关闭IE(已经解决没个页面加一个javascrip) 
 4)任务栏关闭IE 
 5)强行关闭IE进程   .时静态连表中仍旧有该用户名,导致无法登入.   
 且后面模块无法实时显示在线用户.     
 我的pl叫我查application的用法,但我看了下它也就是一个全局的东东,好象也不成.请问诸位大哥,谁有更好的方法呢?   
 比如根本不用静态的list... 说可以用application   
 谢谢,因为本人才做j2ee开发,因此经验有限...     
 xusihai1226@163.com
------解决方案--------------------监听session过期,过期了就从app中删掉,意外情况(杀Ie的进程啊,关ie啊,停电啊)好像没什么办法,设个session的过期时间就可以了
------解决方案--------------------防止同一帐户同时登陆系统的限制:   
 import javax.servlet.http.*; 
 import java.util.*; 
 import javax.servlet.http.HttpSession; 
 import *.AccountModel;   
 public class SessionListener implements HttpSessionListener{ 
     private static java.util.Hashtable hUserName = new Hashtable(); 
     public void sessionCreated(HttpSessionEvent se){ 
        System.out.println( "Session Created. "); 
     }   
     public void sessionDestroyed(HttpSessionEvent se){ 
         hUserName.remove(se.getSession()); 
         System.out.println( "Session Destroyed. "); 
     } 
     /* 
      * isAlreadyEnter-用于判断用户是否已经登录以及相应的处理方法 
      * @param sUserName String-登录的用户名称 
      * @return boolean-该用户是否已经登录过的标志 
      */ 
     public synchronized static boolean isLogined(HttpSession session,String sUserName){ 
       boolean flag = false; 
       if(hUserName.containsKey(sUserName)){ 
                  flag = true; 
                  HttpSession vsession = (HttpSession)hUserName.get(sUserName); 
                  try { 
                    vsession.invalidate(); 
                  } 
                  catch (Exception ex){} 
              } 
       else{ 
           flag = false; 
       } 
       hUserName.remove(sUserName); 
       hUserName.put(sUserName,session); 
       return flag; 
     }   
     public synchronized static boolean isOnline(HttpSession session){ 
         boolean flag = true;   
           AccountModel user = (AccountModel) session.getAttribute( "USER "); 
           HttpSession vsession = (HttpSession) hUserName.get(user.getMemberId()); 
           if (session.getId().equals(vsession.getId())) { 
             flag = true; 
           } else { 
             flag = false; 
           } 
           return flag;   
     } 
 }   
 通过在login的servlet或action中的登陆方法中调用该HttpSessionListener.isLogined()方法判断是否已经登陆了,如果已经登陆,则不让登陆(踢第一个还是后面的,自己决定).   
 在web.xml中加入: 
    <listener>  
      <listener-class> *.SessionListener </listener-class>  
    </listener>