Java之Listener

Java之Listener

Listener監聽器

監聽器有很多種,大部分還是在GUI用的比較多,這裏簡單記錄一點關於HttpSessionListener的

統計session count Listener。主要通過ServletContext上下文來存儲session count,在listener中create和destroyed方法實現session count的邏輯,主要是將ServletContext作爲第三方來進行session count值的存儲與改動。通過jsp中application對象get上下文屬性來獲取count值實現實時顯示session的數量。

public class OnlineCountListener implements HttpSessionListener {

    //創建session監聽
    //一旦創建session就會觸發該事件
    public void sessionCreated(HttpSessionEvent httpSessionEvent) {
        System.out.println(httpSessionEvent.getSession().getId());
        //每次有session創建,代表用戶數量+1
        HttpSession session = httpSessionEvent.getSession();

        //獲取上下文,將人數OnlineCount存入上下文中方便讀寫
        ServletContext sct = session.getServletContext();

        Integer OnlineCount = (Integer) sct.getAttribute("OnlineCount");

        if (OnlineCount==null){
            OnlineCount = new Integer(1);
        }else {
            int count = OnlineCount.intValue();
            OnlineCount = new Integer(count+1);
        }
        //數值通過屬性存入上下文中
        sct.setAttribute("OnlineCount", OnlineCount);
    }

    //銷燬session監聽
    //一旦銷燬session就會觸發該事件
    public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
//每次有session創建,代表用戶數量+1
        HttpSession session = httpSessionEvent.getSession();

        //獲取上下文,將人數OnlineCount存入上下文中方便讀寫
        ServletContext sct = session.getServletContext();

        Integer OnlineCount = (Integer) sct.getAttribute("OnlineCount");

        if (OnlineCount==null){
            OnlineCount = new Integer(0);
        }else {
            int count = OnlineCount.intValue();
            OnlineCount = new Integer(count-1);
        }
        //數值通過屬性存入上下文中
        sct.setAttribute("OnlineCount", OnlineCount);
    }
}

web.xml配置Listener

<listener>
    <listener-class>com.zh1z3ven.listener.OnlineCountListener</listener-class>
</listener>

Index.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>OnlineCount</title>
</head>
<body>
<h2 align="center">當前在線人數爲:<span><%= application.getAttribute("OnlineCount")%></span></h2>
</body>
</html>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章