--Listener (三)使用Listener來實現顯示當前線上人數
主要的思路是:每當使用者第一次訪問web應用的時候都會建立一個session來跟蹤會話,可以監聽session的變化來記錄當前線上的人數。每當建立session的時候,人數+1,當session銷燬的時候,人數減1(在application(servletContext)新增一個屬性來儲存人數)。這樣一來可以建立一個session監聽器,監聽session的變化就可以獲得當前的人數。
package com.tuxianchao.listener;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
public class OnlineNumberListener implements HttpSessionListener {
@Override
public void sessionCreated(HttpSessionEvent sessionEvent) {
System.out.println("建立session,人數加1");
// 獲取servletcontext
ServletContext context = sessionEvent.getSession().getServletContext();
// 獲取當前人數
Integer count = (Integer) context.getAttribute("OnlineCount");
if (count == null) {
// 若果為空,初始化為1(第一個訪問的使用者)
count = new Integer(1);
} else {
// +1
int i = count.intValue();
count = new Integer(i + 1);
}
// 改變人數
context.setAttribute("OnlineCount", count);
}
@Override
public void sessionDestroyed(HttpSessionEvent sessionEvent) {
System.out.println("銷燬session,人數減1");
ServletContext context = sessionEvent.getSession().getServletContext();
Integer count = (Integer) context.getAttribute("OnlineCount");
int i = count.intValue();
count = new Integer(i - 1);
context.setAttribute("OnlineCount", count);
}
}
index.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<h1>Index</h1>
<h4>
Online:<%=application.getAttribute("OnlineCount")%></h4>
</body>
</html>
啟動後:
再使用chrome訪問:
相關推薦
--Listener (三)使用Listener來實現顯示當前線上人數
主要的思路是:每當使用者第一次訪問web應用的時候都會建立一個session來跟蹤會話,可以監聽session的變化來記錄當前線上的人數。每當建立session的時候,人數+1,當session銷燬的時候,人數減1(在application(servletCon
IDEA使用筆記(三)——小齒輪的顯示和隱藏(Autoscroll from Source)
當前 筆記 快捷鍵 什麽 編輯 osc .com log 文件 在玩快捷鍵的時候,不清楚自己操作了什麽,突然間發現——能直接定位到當前可編輯文件的哪個小齒輪,不見了,找了一會也沒弄出來,從網上搜索吧!也沒看到對應的方法,後來自己耐下心來復盤自己的操作,終於發現了,顯示或隱藏
排球計分(三)Controller的實現
rip cat entity ext work using gen you data 1.首先實現的是Vollerballs的控制器: 利用entity framework自動生成控制器,用實體類VolleyballDB為模型和VolleyballContext為上下文自動
自己搭建自動化巡檢系統(三) 通過telnet實現遠程創建loopback
telnet loopback 我們在上一章完成了用代碼操作telnet,實現了遠程控制,分析前面的代碼會發現健壯性太低,需要進行優化,後續會通過開發一個交互式界面來完成人工介入操作網絡的過程。本次實驗目的:實現自動化創建環回口首先更新拓撲,拉出新的路由器和一臺交換機import telnetlibi
Java併發(三):synchronized實現原理
一、synchronized用法 Java中的同步塊用synchronized標記。 同步塊在Java中是同步在某個物件上(監視器物件)。 所有同步在一個物件上的同步塊在同時只能被一個執行緒進入並執行操作。 所有其他等待進入該同步塊的執行緒將被阻塞,直到執行該同步塊中的執行緒退出。 (注:不要使用全
數值分析(三):C++實現線性方程組的高斯-賽德爾迭代法
線性方程組的直接解法之後,就輪到迭代解法了,直接解法針對的是低階稠密矩陣,資料量較少,而工程上有更多的是高階係數矩陣,使用迭代法效率更高,佔用的空間較小。 迭代法的最基本思想就是由初始條件,比如說初始解向量隨便列舉一個,就0向量也行,然後進行迭代,k到k+1,一步一步從k=1開始去逼近真實解
(三)libevent庫實現http
示例 /* A trivial static http webserver using Libevent's evhttp. This is not the best code in the world, and it does some fairly stupid stuff that yo
深入理解 Tomcat(三)Tomcat 底層實現原理
轉載自:https://blog.csdn.net/qq_38182963/article/details/78660777 又是一個週末,這篇文章將從一個簡單的例子來理解tomcat的底層設計; 本文將介紹 Java Web 伺服器是如何執行的, W
【第16天】Java集合(三)---Set介面實現的HashSet集合
1 HashSet簡介 2 基本用法與特點 3 HashSet的唯一性 4 增刪改時需要注意 1 HashSet簡介 作為Set介面的一個實現類,特
人生苦短,我用Python(三)—通過Python實現網路裝置指定指標的收集與指標的圖形化展示
寫在前面: 博主自2018年8月底開始,堅持每週更新一篇技術類部落格,含本篇文章在內,目前已經更新了八篇文章。除十一假期外,堅持每週更新。希望自己能堅持下去。 目前已經開啟了三個系列的文章,分別是: 《人生苦短,我用Python》——已釋出三篇文章 《那些你應該知道的
簡單的通訊(三)----使用Socket實現TCP協議
功能 客戶端向伺服器端傳送一張檔案(這裡以圖片為例),伺服器發反饋訊息給客戶端。 程式碼 package com.demo; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; im
vue響應式原理學習(三)— Watcher的實現
普及知識點 為什麼我們改變了資料,Vue能夠自動幫我們重新整理DOM。就是因為有 Watcher。當然,Watcher 只是派發資料更新,真正的修改DOM,還需要借用VNode,我們這裡先不討論VNode。 computed 計算屬性,內部實現也是基於 Watcher watc
資料結構(三)——佇列及實現、迴圈佇列實現
一、佇列 佇列是一種特殊的線性表,它只允許在表的前端(front)進行刪除操作,而在表的後端(rear)進行插入操作。進行插入操作的端稱為隊尾,進行刪除操作的端稱為隊頭。佇列中沒有元素時,稱為空佇
學習KNN(三)KNN+HOG實現手寫數字識別
在學習KNN(二)KNN演算法手寫數字識別的OpenCV實現我們直接將畫素值作為特徵,實現了KNN演算法的手寫數字識別問題,並得到了較好的準確率,但是就像其他機器學習演算法一樣,KNN的物件同樣是特徵,所以我們可以用一種特徵提取演算法配合KNN實現手寫數字識
RPC入門總結(三)RMI+Zookeeper實現遠端呼叫框架
一、RMI的弊端 RMI是侷限於Java語言中的RPC框架,除了其語言侷限之外,其實現上還有其他的一些弊端。 1. RMI的I/O模型使用BIO模型(偽非同步I/O),使用BIO和執行緒池的方式在大資料量、多連線情況下存在效能瓶頸。 2. RMI 使用了 Java 預設的
Retrofit 2.0 超能實踐(三),輕鬆實現檔案/多圖片上傳/Json字串
通過前兩篇姿勢的入門 通過對Retrofit2.0的前兩篇的基礎入門和案例實踐,掌握了怎麼樣使用Retrofit訪問網路,加入自定義header,包括加入SSL證書,基本的除錯基礎,coolkie同步,但很多需求需要檔案的上傳,今天主題就來分享怎麼
Java框架學習_Spring(三)Spring_AOP底層實現:JDK動態代理和Cglib動態代理
AOP和IOC是Spring的兩大思想,AOP即面向切面程式設計,和OOP相輔相成,具體請看: AOP(面向切面程式設計) 這裡學習一下它的底層實現方法----動態代理,動態代理關鍵的是代理,就像你去公司辦事,你有什麼需求,不可能直接找到 boss(原始碼),而是通過祕書(代理)來實現你
Revit二次開發之技能篇(三)———窗體的實現
在Revit中很多時候,都需要使用者輸入相關的資料,然後再進行程式的執行。在Revit中如何實現窗體呢?請看以下程式碼: ParkingForm frmDlg = new ParkingForm(); frmDlg.ShowDia
深度學習筆記——TensorFlow學習筆記(三)使用TensorFlow實現的神經網路進行MNIST手寫體數字識別
本文是TensorFlow學習的第三部分,參考的是《TensorFlow實戰Google深度學習框架》一書,這部分講述的是使用TensorFlow實現的神經網路進行MNIST手寫體數字識別一個例項。 這個例項將第二部分講述的啟用函式、損失函式、優化演算法、正則化等都運用上了
布隆過濾器總結(三)Java程式碼實現
/** * 專案名:SpiderCrawler * 檔名:BloomFilterTest.java * 作者:zhouyh * 時間:2014-8-29 下午02:54:56 * 描述:TODO(用一句話描述該檔案做什麼) */ package c