大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

Servlet教程

Servlet HttpSessionListener監聽器統計網站在線人數

在許多網站或者軟件應用中都有統計當前在線人數這一功能。在通常情況下,當一個用戶進入網站時就會創建一個 HttpSession 對象,而當用戶離開網站時,HttpSession 對象就會被銷毀。

在 Servlet 的八種監聽器中,HttpSessionListener 監聽器就可以監聽 Web 應用中 HttpSession 對象的創建和銷毀過程。因此,可以使用實現了 HttpSessionListener 接口的監聽器統計網站的當前在線人數。下面將分步驟講解如何使用監聽器統計網站當前在線人數。

1、創建監聽器

在 filterDemo01 項目的 com.mengma.listener 包中,創建一個實現了 HttpSessionListener 接口的監聽器類 OnlineListener,在該類中編寫用于實現統計網站在線人數的代碼,如下所示。

package com.mengma.listener;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
public class OnlineListener implements HttpSessionListener {
    private int count = 0; // 用于統計在線人數
    @Override
    public void sessionCreated(HttpSessionEvent hse) {
        count++; // Session對象創建時count變量加1
        ServletContext context = hse.getSession().getServletContext();
        context.setAttribute("count", new Integer(count));
    }
    @Override
    public void sessionDestroyed(HttpSessionEvent hse) {
        count--; // session對象銷毀時count變量減1
        ServletContext context = hse.getSession().getServletContext();
        context.setAttribute("count", new Integer(count));
    }
}

在 OnlineListener.java 中,首先定義了一個用于統計在線人數的成員變量 count。當每次監聽到 HttpSession 對象創建時,count 成員變量會加 1。當每次監聽到 HttpSession 對象銷毀時,count 成員變量會減 1。

在每次修改 count 成員變量后,還應該將 count 成員變量的值保存到 ServletContext 對象中,以便其他 JSP 頁面程序可以從 ServletContext 對象中取出 count 成員變量,從而在頁面上顯示當前在線用戶數量。

在 web.xml 文件中,配置 OnlineListener 事件監聽器,具體代碼如下:

<listener>
    <listener-class>
        com.mengma.listener.OnlineListener
    </listener-class>
</listener>

需要注意的是,這個 HttpSession 對象在不活動時的最長存活時間仍然是 2min。

2.、創建首頁和注銷頁面

① 實現首頁

在項目的 WebContext 目錄中,創建一個名稱為 index.jsp 的頁面,該頁面用于保存在 ServletContext 對象中的 count 變量值,即相當于顯示當前在線人數,如下所示。

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<html>
<head>
<title>首頁</title>
</head>
<body>
    <h3>
            當前在線人數為:<%=application.getAttribute("count") %>
    </h3>
    <a href="<%=response.encodeUrl("logout.jsp") %>">退出登錄</a>
</body>
</html>

② 實現注銷頁面

在項目的 WebContext 目錄中,編寫注銷頁面 logout.jsp,logout.jsp 頁面用于使當前 Session 對象失效,即完成用戶注銷功能,如下所示。

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<html>
<head>
<title>注銷頁面</title>
</head>
<body>
    <%session.invalidate();%>
    <h3>您已退出本系統</h3>
</body>
</html>

3、運行項目并查看結果

啟動 Tomcat 服務器,在瀏覽器的地址欄中輸入地址 http://localhost:8080/filterDemo01/index.jsp 訪問 index.jsp 頁面,然后再分別開啟兩個不同的瀏覽器窗口(如火狐和谷歌瀏覽器)同時訪問 index.jsp 頁面(目的是防止同一個瀏覽器共享同一個Session會話),此時,各個瀏覽器窗口中顯示的結果如圖 1 所示。

圖 1 login.jsp頁面

單擊圖 1 中任意一個瀏覽器窗口中的“退出登錄”超鏈接,都會訪問 logout.jsp 頁面,而 logout.jsp 頁面中的 session.invalidate() 語句會使當前 Session 失效,從而觸發 HttpSession 對象的銷毀事件并調用監聽器 OnlineListener 中的 sessionDestroyed() 方法,使統計用戶數量的 count 變量減 1。

然后,刷新其余的瀏覽器窗口,此時,各個瀏覽器窗口中顯示的結果如圖 2 所示。

圖 2 logout.jsp頁面

從圖 2 中可以看出,谷歌瀏覽器中的用戶已被注銷,而其余兩個瀏覽器窗口中的在線人數顯示為2。

需要注意的是,如果直接關閉圖 2 所示的某個瀏覽器窗口或保持瀏覽器窗口不刷新,與之對應的 HttpSession 對象會在 2 分鐘之后才被銷毀,即統計的在線人數的 count 變量會在 2 分鐘后自動減 1。因此,可以說明網站統計的在線人數并不是真正意義上的并發訪問人數,而是指某一個時間段內的訪問人數。

全部教程
主站蜘蛛池模板: 日本一级在线观看视频播放 | 欧美xxxx成人免费视频 | 我我色综合 | 亚洲sss视频 | 亚洲欧洲一二三区机械有限公司 | 免费人成激情视频在线观看冫 | 欧美精品亚洲精品 | 国产 高清 在线 | 亚洲精彩视频在线观看 | 国产v片成人影院在线观看 国产v视频 | 国产免费不卡v片在线观看 国产免费不卡视频 | 日韩在线视频网站 | 日日摸夜夜添夜夜添欧美毛片 | 看全色黄大色大片免费久久久 | 欧美亚洲一区二区三区在线 | 国产香蕉精品视频在 | 亚洲欧美一 | 成人免费午间影院在线观看 | 欧美成人一区二区三区在线视频 | 欧美日韩福利视频一区二区三区 | 色干综合 | 男人午夜剧场 | 亚州综合激情另类久久久 | 婷婷四房综合激情五月性色 | 国产一区二区三区高清 | 97视频在线免费 | 亚洲日本va中文字幕在线不卡 | 国产在线不卡视频 | 奇米狠狠操 | 久久久久久草 | 亚洲毛片在线看 | 人成午夜欧美大片免费视频 | 国产最新在线视频 | 欧美成人私人视频88在线观看 | 久久r这里只有精品 | 老司机午夜精品视频播放 | 老司机午夜在线视频免费 | 精品一区二区三区亚洲 | 日日干天天干 | 天天摸天天操 | 色综合合久久天天综合绕视看 |