国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

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

CloudwiseAPM / 2292人閱讀

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

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

常見的流程是,標(biāo)準(zhǔn)的mvc 即 登錄表單,用戶提交數(shù)據(jù)到登錄檢查,若登錄檢查通過以后,觸發(fā)session事件,保存進(jìn)入在線人員列表中,頁面跳轉(zhuǎ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)聽
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);
    }

    // 用戶注銷登錄
    // 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 銷毀
    @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
    

在線用戶統(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)登錄
顯示用戶在線
<%
    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://m.specialneedsforspecialkids.com/yun/73747.html

相關(guān)文章

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

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

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

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

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

    摘要:無證連接進(jìn)行異常記錄并關(guān)閉連接。離線消息檢測(cè)到上線立即推送這是消息推送需要實(shí)現(xiàn)的基本功能之一了,詳見代碼。主要功能協(xié)助進(jìn)行初始化,心跳包檢測(cè),斷線自動(dòng)重連消息推送的第二種方式在下篇中再編寫 消息重發(fā)中需要注意的問題 由于最近工作中接觸了比較多關(guān)閉消息推送以及異常重發(fā)機(jī)制的問題,終于得空總結(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è)表單頁,輸入用戶登錄和密碼,然后信息提交到頁面進(jìn)行驗(yàn)證,如果可以服務(wù)器跳轉(zhuǎn)到登錄成功頁,失敗,跳轉(zhuǎn)到錯(cuò)誤頁跳轉(zhuǎn)的時(shí)候窗口的地址會(huì)發(fā)生變化代碼如下編寫登錄代碼登錄登錄登錄操作用戶登錄登錄登錄密碼登錄重置登錄處理 jsp 實(shí)栗 jsp + jdbc 實(shí)現(xiàn)登錄 實(shí)現(xiàn)思路 一個(gè)表單頁,輸入用戶登錄和密碼,然后信息提交到j(luò)sp頁面進(jìn)行驗(yàn)證,如果可以服務(wù)器跳轉(zhuǎn)到登錄成功頁,...

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

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

0條評(píng)論

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