客服人員在線session監聽器

 Listener類:javascript

public class UserOnLineListener implements HttpSessionAttributeListener {
 
 /** 
     * 定義監聽的session屬性名. 
     */ 
    public final static String LISTENER_NAME = "_loginSession"; 
   
    /** 
     * 定義存儲客戶登陸session的集合. 
     */ 
    @SuppressWarnings("unchecked")
 private static List sessions = new ArrayList();  
    /** 
     * 加入session時的監聽方法. 
     *  
     * @param HttpSessionBindingEvent 
     *            session事件 
     */ 
 @SuppressWarnings("unchecked")
 @Override
 public void attributeAdded(HttpSessionBindingEvent se) {
  
  //System.out.println("被添加的名字是:"+se.getName());
  //System.out.println("被添加的值是:"+se.getValue());
 if (LISTENER_NAME.equals(se.getName())) {  
            sessions.add(se.getValue());  
        }  
  
 }
 /** 
     * session失效時的監聽方法. 
     *  
     * @param HttpSessionBindingEvent 
     *            session事件 
     */ 
 @Override
 public void attributeRemoved(HttpSessionBindingEvent se) {
  //System.out.println("被銷燬的名字是:"+se.getName());
  //System.out.println("被銷燬的值是:"+se.getValue());
  if (LISTENER_NAME.equals(se.getName())) {  
            sessions.remove(se.getValue());  
        }  
 }
  /** 
     * session覆蓋時的監聽方法. 
     *  
     * @param HttpSessionBindingEvent 
     *            session事件 
     */ 
 @Override
 public void attributeReplaced(HttpSessionBindingEvent se) {
 }
 /** 
     * 返回客戶登陸session的集合. 
     *  
     * @return 
     */ 
    @SuppressWarnings("unchecked")
 public static List getSessions() {  
        return sessions;  
    }  

}
 
java實體類:封裝登陸用戶的信息
public final class OnLineSession implements Serializable {
 private static final long serialVersionUID = 1L;
 /** 
     * 客戶計算機的ip. 
     */ 
    private String ip = null;  
   
    /**
     * 登陸用戶ID
     */
    private String keyId=null;
    /** 
     * 客戶登陸名.   客服工號
     */  
  private String loginId = null;  
    /** 
     * 客戶登陸系統時間. 
     */ 
    private String onlineTime = null;  
      
    /** 
     * 構造器. 
     * @param ip 
     * @param loginId 
     * @param onlineTime 
     */ 
    public OnLineSession(String ip,String keyId,String loginId,String onlineTime){  
        this.ip=ip;  
        this.keyId=keyId;
        this.loginId=loginId;  
        this.onlineTime=onlineTime;  
    }  
      
    /** 
     * @return Returns the ip. 
     */ 
    public String getIp() {  
        return ip;  
    }  
    /** 
     * @param ip The ip to set. 
     */  
public void setIp(String ip) {  
        this.ip = ip;  
    }  
    /** 
     * @return Returns the loginId. 
     */ 
    public String getLoginId() {  
        return loginId;  
    }  
    /** 
     * @param loginId The loginId to set. 
     */ 
    public void setLoginId(String loginId) {  
        this.loginId = loginId;  
    }  
    /** 
     * @return Returns the onlineTime. 
     */ 
    public String getOnlineTime() {  
        return onlineTime;  
    }  
    /** 
     * @param onlineTime The onlineTime to set. 
     */ 
    public void setOnlineTime(String onlineTime) {  
        this.onlineTime = onlineTime;  
    }
public String getKeyId() {
  return keyId;
 }
 public void setKeyId(String keyId) {
  this.keyId = keyId;
 }  
 
}
 
web.xml配置Listener
     <listener>
    <listener-class>包路徑.UserOnLineListener</listener-class>
    <load-on-startup>1</load-on-startup>
    <description>session監聽器用戶在線離線</description>
    </listener>
 
在Action中重要的代碼:
//記入session監聽器
   /**
    * request.getRemoteAddr() 客戶端的ip
    *
    */
 session.setAttribute(UserOnLineListener.LISTENER_NAME,
     new OnLineSession(request.getRemoteAddr(),u.getUserId().toString(),u.getUserAccount(),new Date().toString()));
//取出記入session監聽的值
HttpServletRequest request = ServletActionContext.getRequest();  
 List sessions = UserOnLineListener.getSessions();
   List<OnLineSession> sessionList=new ArrayList<OnLineSession>();
   if(sessions!=null){  
             OnLineSession onlineSession = null;   //封裝登陸用戶的對象
             Iterator it = sessions.iterator();  
             while(it.hasNext()){ 
                  onlineSession=(OnLineSession)it.next(); 
                  sessionList.add(onlineSession);//登陸用戶的工號
                  //System.out.println("用戶登陸的工號的序號:"+onlineSession.getKeyId());
             }
   } 
request.setAttribute("sessionList", sessionList);
  在JSP中怎樣判斷在線離線
<s:iterator value="result.resultlist" var="user">
           <!-- 頁面級變量起控制做用 start 顯示用戶是否上下線問題 -->
     <s:set name="onlineValue" value="0" />
         <c:forEach items="${requestScope.sessionList}" var="online">
                      <c:if test="${online.keyId eq userId }">     
                          <s:set name="onlineValue" value="1" />
                      </c:if>  
                 </c:forEach>
          <!-- 頁面級變量起控制做用 stop -->
  <s:if test="#onlineValue==1">在線</s:if>
  <s:if test="#onlineValue!=1"> 離線</s:if>
 
 
用退出的時候也要清除一下session.removeAttribute(UserOnLineListener.LISTENER_NAME)這個,以及瀏覽器關閉的時候也要監聽一下,將session值失效
瀏覽器關閉清除session值 javascript
/** 監聽關閉瀏覽器的  清除session值  */
window.onbeforeunload=function()  
{       
      var warnning = '<fmt:message key="systemMessage.exitWarning" />';
      var beforeExit='<fmt:message key="systemMessage.beforeExitWarning" />';
      if(event.clientY<0  &&  event.clientX>document.body.clientWidth-20  ||  event.clientY<0  &&  event.clientX<20  ||
         event.altKey || event.ctrlKey ||  event.clientY>document.body.clientHeight){
            //alert(beforeExit);
            //return warnning;
            window.location ='${basePath}companyManage/user!loginOut.action';//進入後臺清除session值的操做
       }    
說明:這種情況也不能很是的準確,尤爲是瀏覽器關閉的時候有可能觸發不到,哎,大致上能夠知足的,呵呵!!!不過在web.xml中設置一個session失效時間爲30分鐘便可
相關文章
相關標籤/搜索