摘要:實(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); } }配置文件
在線(xiàn)用戶(hù)統(tǒng)計(jì)Archetype Created Web Application com.ming.listener.OnlineUserList LoginFile com.ming.filter.LoginFile LoginFile /index.jsp login com.ming.servlrt.LoginServlet login /loginServlet
<%@ 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" %>運(yùn)行效果Title 您已經(jīng)登錄 顯示用戶(hù)在線(xiàn) <% Set all = (Set)super.getServletContext().getAttribute("online"); Iterator iterator = all.iterator(); while(iterator.hasNext()){ %> <%=iterator.next()%> <% } %>
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/73747.html
摘要:現(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...
摘要:當(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í)候我們就需要用到今天講到的這些工具了。 首先我們先看一下攔截器 我們需要先自定義...
摘要:無(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)上...
摘要:實(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è),...
閱讀 665·2021-11-15 11:39
閱讀 2902·2021-10-08 10:04
閱讀 3266·2019-08-30 10:57
閱讀 3027·2019-08-26 13:25
閱讀 1911·2019-08-26 12:14
閱讀 2639·2019-08-23 15:27
閱讀 2999·2019-08-23 15:18
閱讀 1778·2019-08-23 14:26