成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

監(jiān)聽(tīng)器實(shí)栗 在線(xiàn)人數(shù)統(tǒng)計(jì)

CloudwiseAPM / 2296人閱讀

摘要:實(shí)現(xiàn)思路常見(jiàn)的流程是標(biāo)準(zhǔn)的即登錄表單用戶(hù)提交數(shù)據(jù)到登錄檢查若登錄檢查通過(guò)以后觸發(fā)事件保存進(jìn)入在線(xiàn)人員列表中頁(yè)面跳轉(zhuǎn)到在線(xiàn)用戶(hù)列表若用戶(hù)注銷(xiāo)從在線(xiàn)列表中刪除代碼如下使用集合即集合去重原因內(nèi)部存儲(chǔ)為的鍵值對(duì)為由于哈希表的特征即可去重項(xiàng)目結(jié)構(gòu)

實(shí)現(xiàn)思路

常見(jiàn)的流程是,標(biāo)準(zhǔn)的mvc 即 登錄表單,用戶(hù)提交數(shù)據(jù)到登錄檢查,若登錄檢查通過(guò)以后,觸發(fā)session事件,保存進(jìn)入在線(xiàn)人員列表中,頁(yè)面跳轉(zhuǎn)到在線(xiàn)用戶(hù)列表,若用戶(hù)注銷(xiāo),從在線(xiàn)列表中刪除.

代碼如下
使用set集合, 即 set集合去重 原因 內(nèi)部存儲(chǔ)為map,mqp的鍵值對(duì)為hashcode 由于哈希表的特征 即 set可去重
項(xiàng)目結(jié)構(gòu)

創(chuàng)建迭代器
package com.ming.listener;

import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
import java.util.Set;
import java.util.TreeSet;

// 對(duì)servlet 上下文監(jiān)聽(tīng)
public class OnlineUserList implements HttpSessionAttributeListener, HttpSessionListener, ServletContextListener {
    private ServletContext servletContext = null;
    // 增加session屬性的時(shí)候,觸發(fā)事件
    // session 屬性增加
    @Override
    public void attributeAdded(HttpSessionBindingEvent httpSessionBindingEvent) {
        Set all = (Set)this.servletContext.getAttribute("online");
        all.add(httpSessionBindingEvent.getValue());
        this.servletContext.setAttribute("online", all);
    }

    // 用戶(hù)注銷(xiāo)登錄
    // session 屬性刪除
    @Override
    public void attributeRemoved(HttpSessionBindingEvent httpSessionBindingEvent) {
        Set all = (Set)this.servletContext.getAttribute("online");
        all.remove(httpSessionBindingEvent.getValue());
        this.servletContext.setAttribute("online", all);
    }

    @Override
    public void attributeReplaced(HttpSessionBindingEvent httpSessionBindingEvent) {

    }

    // 上下文初始化
    // 初始化
    @Override
    public void contextInitialized(ServletContextEvent servletContextEvent) {
        // 獲得上下文實(shí)栗
        this.servletContext = servletContextEvent.getServletContext();
        // 設(shè)置保存set集合
        this.servletContext.setAttribute("online", new TreeSet());
    }

    @Override
    public void contextDestroyed(ServletContextEvent servletContextEvent) {

    }

    @Override
    public void sessionCreated(HttpSessionEvent httpSessionEvent) {

    }

    // session 銷(xiāo)毀
    @Override
    public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
        Set all = (Set)this.servletContext.getAttribute("online");
        all.remove(httpSessionEvent.getSession().getAttribute("id"));
        this.servletContext.setAttribute("online", all);
    }
}
配置文件



  Archetype Created Web Application
    
        com.ming.listener.OnlineUserList
    
    
        LoginFile
        com.ming.filter.LoginFile
    
    
        LoginFile
        /index.jsp
    
    
        login
        com.ming.servlrt.LoginServlet
    
    
        login
        /loginServlet
    

在線(xiàn)用戶(hù)統(tǒng)計(jì)
<%@ page import="java.util.Set" %>
<%@ page import="java.util.Iterator" %>
<%@ page import="javax.swing.text.html.HTMLDocument" %><%--
  Created by IntelliJ IDEA.
  User: ming
  Date: 19-3-17
  Time: 上午4:14
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    Title


您已經(jīng)登錄
顯示用戶(hù)在線(xiàn)
<%
    Set all = (Set)super.getServletContext().getAttribute("online");
    Iterator iterator = all.iterator();
    while(iterator.hasNext()){
        %>
            <%=iterator.next()%>
        <%
    }
%>


運(yùn)行效果

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/73747.html

相關(guān)文章

  • 監(jiān)聽(tīng)器應(yīng)用【統(tǒng)計(jì)網(wǎng)站人數(shù)、自定義session掃描器、踢人小案例】

    摘要:現(xiàn)在,我們想要統(tǒng)計(jì)的是網(wǎng)站的在線(xiàn)人數(shù)。隔一段時(shí)間去做某事,這肯定是定時(shí)器的任務(wù)呀。定時(shí)器應(yīng)該在服務(wù)器一啟動(dòng)的時(shí)候,就應(yīng)該被創(chuàng)建了。定時(shí)器掃描容器的時(shí)候,可能是獲取不到所有的的。 從第一篇已經(jīng)講解過(guò)了監(jiān)聽(tīng)器的基本概念,以及Servlet各種的監(jiān)聽(tīng)器。這篇博文主要講解的是監(jiān)聽(tīng)器的應(yīng)用。 統(tǒng)計(jì)網(wǎng)站在線(xiàn)人數(shù) 分析 我們?cè)诰W(wǎng)站中一般使用Session來(lái)標(biāo)識(shí)某用戶(hù)是否登陸了,如果登陸了,就在Ses...

    Awbeci 評(píng)論0 收藏0
  • Spring Boot 的簡(jiǎn)單教程(八)攔截器,過(guò)濾器,監(jiān)聽(tīng)器

    摘要:當(dāng)過(guò)濾器有注入其他類(lèi)時(shí),可直接通過(guò)的方式進(jìn)行實(shí)體類(lèi)過(guò)濾器,這樣不可自動(dòng)注入過(guò)濾器使用的其他類(lèi)。就是先簡(jiǎn)單的記錄一下攔截器,過(guò)濾器和監(jiān)聽(tīng)器的簡(jiǎn)單使用方法,后期如果有詳細(xì)的使用方法,再來(lái)更新本文。 很多時(shí)候我們都想要做一些與業(yè)務(wù)邏輯無(wú)關(guān)的事情,比如統(tǒng)計(jì)在線(xiàn)人數(shù),篩選登陸賬號(hào),統(tǒng)計(jì)頁(yè)面瀏覽量等等。。。這時(shí)候我們就需要用到今天講到的這些工具了。 首先我們先看一下攔截器 我們需要先自定義...

    SKYZACK 評(píng)論0 收藏0
  • 消息推送異常重發(fā)需要注意的點(diǎn)(上篇)

    摘要:無(wú)證連接進(jìn)行異常記錄并關(guān)閉連接。離線(xiàn)消息檢測(cè)到上線(xiàn)立即推送這是消息推送需要實(shí)現(xiàn)的基本功能之一了,詳見(jiàn)代碼。主要功能協(xié)助進(jìn)行初始化,心跳包檢測(cè),斷線(xiàn)自動(dòng)重連消息推送的第二種方式在下篇中再編寫(xiě) 消息重發(fā)中需要注意的問(wèn)題 由于最近工作中接觸了比較多關(guān)閉消息推送以及異常重發(fā)機(jī)制的問(wèn)題,終于得空總結(jié)一下經(jīng)驗(yàn) 目前接觸的消息推送分為兩種 主動(dòng)推送:一般為websocket建立長(zhǎng)連接實(shí)現(xiàn),此處網(wǎng)上...

    terro 評(píng)論0 收藏0
  • jsp 實(shí)栗 jsp + jdbc 登錄

    摘要:實(shí)栗實(shí)現(xiàn)登錄實(shí)現(xiàn)思路一個(gè)表單頁(yè),輸入用戶(hù)登錄和密碼,然后信息提交到頁(yè)面進(jìn)行驗(yàn)證,如果可以服務(wù)器跳轉(zhuǎn)到登錄成功頁(yè),失敗,跳轉(zhuǎn)到錯(cuò)誤頁(yè)跳轉(zhuǎn)的時(shí)候窗口的地址會(huì)發(fā)生變化代碼如下編寫(xiě)登錄代碼登錄登錄登錄操作用戶(hù)登錄登錄登錄密碼登錄重置登錄處理 jsp 實(shí)栗 jsp + jdbc 實(shí)現(xiàn)登錄 實(shí)現(xiàn)思路 一個(gè)表單頁(yè),輸入用戶(hù)登錄和密碼,然后信息提交到j(luò)sp頁(yè)面進(jìn)行驗(yàn)證,如果可以服務(wù)器跳轉(zhuǎn)到登錄成功頁(yè),...

    YacaToy 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<