javaweb:監聽器

来源:https://www.cnblogs.com/jmsstudy/archive/2022/07/31/16536676.html
-Advertisement-
Play Games

監聽器種類數不勝數,監聽器最常被應用在GUI中,不過網站中也可以設置監聽器,這裡我們利用sessionListener實現一個網站線上人數統計的監聽來瞭解一下監聽器的使用。 首先建立一個類來實現監聽器OnlineListener.class 1 package com.jms.listener; 2 ...


監聽器種類數不勝數,監聽器最常被應用在GUI中,不過網站中也可以設置監聽器,這裡我們利用sessionListener實現一個網站線上人數統計的監聽來瞭解一下監聽器的使用。

首先建立一個類來實現監聽器OnlineListener.class

 1 package com.jms.listener;
 2 
 3 import javax.servlet.ServletContext;
 4 import javax.servlet.http.HttpSessionEvent;
 5 import javax.servlet.http.HttpSessionListener;
 6 
 7 public class OnlineListener implements HttpSessionListener{
 8     
 9     //統計網站中線上人數
10 
11     //創建session時,觸發這個監聽
12     @Override
13     public void sessionCreated(HttpSessionEvent se) {
14         ServletContext sctContext = se.getSession().getServletContext();
15         Integer onlinenumber = (Integer) sctContext.getAttribute("OnlineNumber");
16         if(onlinenumber == null) {
17             onlinenumber = 1;
18         } else {
19             onlinenumber += 1;
20         }
21         sctContext.setAttribute("OnlineNumber", onlinenumber);
22     }
23 
24     //銷毀session時,觸發這個監聽
25     @Override
26     public void sessionDestroyed(HttpSessionEvent se) {
27         ServletContext sctContext = se.getSession().getServletContext();
28         Integer onlinenumber = (Integer) sctContext.getAttribute("OnlineNumber");
29         if(onlinenumber > 0) {
30             onlinenumber -= 1;
31         }
32         sctContext.setAttribute("OnlineNumber", onlinenumber);
33     }
34     
35     
36 }

編輯我們的index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>線上人數</title>
</head>
<body>
<% response.setHeader("Refresh", "3"); %>
<h1><span style="color:blue">當前線上人數:<%=pageContext.getServletContext().getAttribute("OnlineNumber") %></span></h1>

</body>
</html>

修改web.xml

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

 訪問網站,測試一下效果如何

打開一個瀏覽器

 打開第二個瀏覽器

 

 

 

設置的session過期時間為1分鐘

 

 

 

(本文僅作個人學習記錄用,如有紕漏,敬請指正)


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 先瞭解Thymeleaf是什麼 1. Thymeleaf 簡介 Thymeleaf 是新⼀代 Java 模板引擎,與 Velocity、FreeMarker 等傳統 Java 模板引擎不同,Thymeleaf ⽀持 HTML 原型,其⽂件尾碼為“.html”,因此它可以直接被瀏覽器打開,如果你直接瀏 ...
  • Maven是 Apache 軟體基金會組織維護的一款專門為 Java 項目提供構建和依賴管理支持的工具。 ·首先,Maven核心程式:負責Maven的總體調度,具體操作使用的是Maven插件。 ·每執行一個Maven命令,實際調用的是Maven插件,所需要的相關jar包需聯網下載。 ·安裝Maven ...
  • HTTP&Tomcat&Servlet 1、JavaWeb概念 Web:全球區域網,也稱萬維網(www),能夠通過瀏覽器訪問的網站 JavaWeb:是用Java相關的技術來做網站 2、JavaWeb技術棧 B/S架構 Browser/Server,瀏覽器/伺服器 架構模式。它的特點是,客戶端只需要瀏 ...
  • 一、Python包 python包在開發中十分常見,一般通過導入包含特定功能的python模塊包進行使用。當然,也可以自己創建打包模塊,然後發佈,安裝使用。 1、安裝包 線上安裝包:pip install 包名; 安裝第三方包:python setup.py install (幾乎每個python第 ...
  • 1、Maven 1.1、Maven概念 背景 在一個項目中經常需要手動導入jar包,當需要的jar包數量多的時候,非常難以管理;同時還需要人為去下載各種jar包。同時不同IDE之間,項目結構不一樣,造成遷移性低下,不通用的問題 因此Maven被創造出來解決這個難題 概念 Maven是專門用於管理和構 ...
  • 數組 數組是啥? 數組是幹嘛的? 數組怎麼用? 不管咋樣,先看百科瞭解億下: C++ 數組 —— 菜鳥教程 C++ 支持數組數據結構,它可以存儲一個固定大小的相同類型元素的順序集合。數組是用來存儲一系列數據,但它往往被認為是一系列相同類型的變數。 數組的聲明並不是聲明一個個單獨的變數,比如 numb ...
  • Wing Pro for Mac是一個基於Python編程語言開發的集成開發環境,主要針對學習Python的Mac用戶設計,你可以通過本軟體調試PythonIED的所有功能,內置安裝,定製,設置項目,編輯,搜索,重構等多種功能,您可以選擇在軟體上建立一個新的編輯方案,也可以選擇安裝擴展的IDE腳本到 ...
  • 什麼是Filter實現許可權攔截,比如說我們登陸一個網站,登陸成功後可以訪問其中的內容,退出登陸後就不能再對內容進行訪問,這就用到了我們的Filter實現許可權攔截。 那麼具體是怎麼實現的呢? 原理很簡單,我們可以給已登錄用戶session存放一個用於標記登陸的數據,只需要在過濾器里看能否獲取數據來進行 ...
一周排行
    -Advertisement-
    Play Games
  • 隨著Aspire發佈preview5的發佈,Microsoft.Extensions.ServiceDiscovery隨之更新, 服務註冊發現這個屬於老掉牙的話題解決什麼問題就不贅述了,這裡主要講講Microsoft.Extensions.ServiceDiscovery(preview5)以及如何 ...
  • 概述:通過使用`SemaphoreSlim`,可以簡單而有效地限制非同步HTTP請求的併發量,確保在任何給定時間內不超過20個網頁同時下載。`ParallelOptions`不適用於非同步操作,但可考慮使用`Parallel.ForEach`,儘管在非同步場景中謹慎使用。 對於併發非同步 I/O 操作的數量 ...
  • 1.Linux上安裝Docken 伺服器系統版本以及內核版本:cat /etc/redhat-release 查看伺服器內核版本:uname -r 安裝依賴包:yum install -y yum-utils device-mapper-persistent-data lvm2 設置阿裡雲鏡像源:y ...
  • 概述:WPF界面綁定和渲染大量數據可能導致性能問題。通過啟用UI虛擬化、非同步載入和數據分頁,可以有效提高界面響應性能。以下是簡單示例演示這些優化方法。 在WPF中,當你嘗試綁定和渲染大量的數據項時,性能問題可能出現。以下是一些可能導致性能慢的原因以及優化方法: UI 虛擬化: WPF提供了虛擬化技術 ...
  • 引言 上一章節介紹了 TDD 的三大法則,今天我們講一下在單元測試中模擬對象的使用。 Fake Fake - Fake 是一個通用術語,可用於描述 stub或 mock 對象。 它是 stub 還是 mock 取決於使用它的上下文。 也就是說,Fake 可以是 stub 或 mock Mock - ...
  • 為.net6在CentOS7上面做準備,先在vmware虛擬機安裝CentOS 7.9 新建CentOS764位的系統 因為CentOS8不更新了,所以安裝7;簡單就一筆帶過了 選擇下載好的操作系統的iso文件,下載地址https://mirrors.aliyun.com/centos/7.9.20 ...
  • 經過前面幾篇的學習,我們瞭解到指令的大概分類,如:參數載入指令,該載入指令以 Ld 開頭,將參數載入到棧中,以便於後續執行操作命令。參數存儲指令,其指令以 St 開頭,將棧中的數據,存儲到指定的變數中,以方便後續使用。創建實例指令,其指令以 New 開頭,用於在運行時動態生成並初始化對象。方法調用指... ...
  • LiteDB 是一個輕量級的嵌入式 NoSQL 資料庫,其設計理念與 MongoDB 類似,但它是完全使用 C# 開發的,因此與 C# 應用程式的集成非常順暢。與 SQLite 相比,LiteDB 提供了 NoSQL(即鍵值對)的數據存儲方式,並且是一個開源且免費的項目。它適用於桌面、移動以及 We ...
  • 1 開源解析和拆分文檔 第三方的工具去對文件解析拆分,去將我們的文件內容給提取出來,並將我們的文檔內容去拆分成一個小的chunk。常見的PDF word mark down, JSON、HTML。都可以有很好的一些模塊去把這些文件去進行一個東西去提取。 優勢 支持豐富的文檔類型 每種文檔多樣化選擇 ...
  • OOM是什麼?英文全稱為 OutOfMemoryError(記憶體溢出錯誤)。當程式發生OOM時,如何去定位導致異常的代碼還是挺麻煩的。 要檢查OOM發生的原因,首先需要瞭解各種OOM情況下會報的異常信息。這樣能縮小排查範圍,再結合異常堆棧、heapDump文件、JVM分析工具和業務代碼來判斷具體是哪 ...