Jsp統計線上人數和線上註冊人數
一、統計線上人數
1.監聽器
說明:實現了HttpSessionListener定義的兩個方法:sessionCreated()和sessionDestroyed()。這兩個方法可以監聽到當前應用中session的建立和銷燬情況。
以下兩種情況下就會發生sessionDestoryed(會話銷燬)事件:
(1)執行session.invalidate()方法時。
(2)如果使用者長時間沒有訪問伺服器,超過了會話最大超時時間,伺服器就會自動銷燬超時的session。
時間單位是一分鐘,並且只能是整數,如果是零或負數,那麼會話就永遠不會超時。
2.web.xml中配置
3.jsp呼叫
二、統計註冊人數
1.監聽器
說明:實現了HttpSessionBindingListener介面,介面中共定義了兩個方法:valueBound()和valueUnbound(),分別對應資料繫結,和取消繫結兩個事件。
所謂對session進行資料繫結,就是呼叫session.setAttribute()把HttpSessionBindingListener儲存進session中。
HttpSessionListener只需要設定到web.xml中就可以監聽整個應用中的所有session。HttpSessionBindingListener必須例項化後放入某一個session中,才可以進行監聽。
從監聽範圍上比較,HttpSessionListener設定一次就可以監聽所有session,HttpSessionBindingListener通常都是一對一的。
valueUnbound的觸發條件是以下三種情況:
(1)執行session.invalidate()時。
(2)session超時,自動銷燬時。
(3)執行session.setAttribute("onlineUserListener", "其他物件");或session.removeAttribute("onlineUserListener");將listener從session中刪除時。
因此,只要不將listener從session中刪除,就可以監聽到session的銷燬。
2.jsp呼叫
(1)login.jsp
(2)counter.jsp
三、RequestDispatcher
RequestDispatcher是一個Web資源的包裝器,可以用來把當前request傳遞到該資源,或者把新的資源包括到當前響應中。RequestDispatcher介面中定義了兩個方法:include/forward。
由於<jsp:include>只能指定固定的jsp檔名,不能動態指定jsp檔名。需要把<jsp:include>翻譯為Java code – RequestDispatcher.include();
用法:
<% request.getRequestDispatcher(filename).include(request, response); />
RequestDispatcher.forward()方法將當前的request和response重定向到該RequestDispacher指定的資源。只有在尚未向客戶端輸出響應時才可以呼叫forward()方法,如果頁面快取不為空,在重定向前將自動清除快取。否則將丟擲一個IllegalStateException異常。
JSP中的三種頁面跳轉方式:
1. response.sendRedirect();
2. response.setHeader("location","");
3. <jsp:forward page="" />
1.監聽器
- package com.logcd.listener;
- import javax.servlet.ServletContext;
- import javax.servlet.http.HttpSessionEvent;
- import javax.servlet.http.HttpSessionListener;
- public class SessionCounter implements HttpSessionListener {
- public void sessionCreated(HttpSessionEvent event) {
- ServletContext ctx = event.getSession( ).getServletContext( );
- Integer numSessions = (Integer) ctx.getAttribute("numSessions");
- if (numSessions == null) {
- numSessions = new Integer(1);
- }else {
- int count = numSessions.intValue( );
- numSessions = new Integer(count + 1);
- }
- ctx.setAttribute("numSessions", numSessions);
- }
- public void sessionDestroyed(HttpSessionEvent event) {
- ServletContext ctx = event.getSession( ).getServletContext( );
- Integer numSessions = (Integer) ctx.getAttribute("numSessions");
- if (numSessions == null) {
- numSessions = new Integer(0);
- }
- else {
- int count = numSessions.intValue( );
- numSessions = new Integer(count - 1);
- }
- ctx.setAttribute("numSessions", numSessions);
- }
- }
說明:實現了HttpSessionListener定義的兩個方法:sessionCreated()和sessionDestroyed()。這兩個方法可以監聽到當前應用中session的建立和銷燬情況。
以下兩種情況下就會發生sessionDestoryed(會話銷燬)事件:
(1)執行session.invalidate()方法時。
(2)如果使用者長時間沒有訪問伺服器,超過了會話最大超時時間,伺服器就會自動銷燬超時的session。
- <session-config>
- <session-timeout>1</session-timeout>
- </session-config>
2.web.xml中配置
- <listener>
- <listener-class>com.logcd.listener.SessionCounter</listener-class>
- </listener>
3.jsp呼叫
- 目前共有<span class="salient"> <%=application.getAttribute("numSessions")%> </span>人線上
二、統計註冊人數
1.監聽器
- package com.logcd.listener;
- import java.util.HashMap;
- import java.util.Map;
- import javax.servlet.ServletContext;
- import javax.servlet.http.HttpSession;
- import javax.servlet.http.HttpSessionBindingEvent;
- import javax.servlet.http.HttpSessionBindingListener;
- public class OnlineUserBindingListener implements HttpSessionBindingListener{
- private String userId;
- private String userName;
- public OnlineUserBindingListener(String userId,String username){
- this.setUserId(userId);
- this.setUserName(userName);
- }
- @SuppressWarnings("unchecked")
- public void valueBound(HttpSessionBindingEvent event) {
- HttpSession session = event.getSession();
- ServletContext application = session.getServletContext();
- // 把使用者放入線上列表
- Map onlineUserList = (Map) application.getAttribute("onlineUserList");
- // 第一次使用前,需要初始化
- if (onlineUserList == null) {
- onlineUserList = new HashMap();
- application.setAttribute("onlineUserList", onlineUserList);
- }
- onlineUserList.put(this.userId, this.userName);
- }
- public void valueUnbound(HttpSessionBindingEvent event) {
- HttpSession session = event.getSession();
- ServletContext application = session.getServletContext();
- // 從線上列表中刪除使用者
- Map onlineUserList = (Map) application.getAttribute("onlineUserList");
- onlineUserList.remove(this.userId);
- }
- public String getUserId() {
- return userId;
- }
- public void setUserId(String userId) {
- this.userId = userId;
- }
- public String getUserName() {
- return userName;
- }
- public void setUserName(String userName) {
- this.userName = userName;
- }
- }
說明:實現了HttpSessionBindingListener介面,介面中共定義了兩個方法:valueBound()和valueUnbound(),分別對應資料繫結,和取消繫結兩個事件。
所謂對session進行資料繫結,就是呼叫session.setAttribute()把HttpSessionBindingListener儲存進session中。
HttpSessionListener只需要設定到web.xml中就可以監聽整個應用中的所有session。HttpSessionBindingListener必須例項化後放入某一個session中,才可以進行監聽。
從監聽範圍上比較,HttpSessionListener設定一次就可以監聽所有session,HttpSessionBindingListener通常都是一對一的。
valueUnbound的觸發條件是以下三種情況:
(1)執行session.invalidate()時。
(2)session超時,自動銷燬時。
(3)執行session.setAttribute("onlineUserListener", "其他物件");或session.removeAttribute("onlineUserListener");將listener從session中刪除時。
因此,只要不將listener從session中刪除,就可以監聽到session的銷燬。
2.jsp呼叫
(1)login.jsp
- <%@ page language="java" import="java.util.*" pageEncoding="gbk"%>
- <%@ page import="com.logcd.listener.OnlineUserBindingListener"%>
- <%
- String path = request.getContextPath();
- String basePath = request.getScheme() + "://"
- + request.getServerName() + ":" + request.getServerPort()
- + path + "/";
- String userId = "2000090603";
- String userName = "LogCN";
- session.setAttribute(userId,userName);
- session.setAttribute("onlineUserBindingListener", new OnlineUserBindingListener(userId,userName));
- response.sendRedirect("counter.jsp");
- %>
(2)counter.jsp
- <%@ page language="java" import="java.util.*" pageEncoding="gbk"%>
- 註冊使用者<span class="salient"><%=((Map)application.getAttribute("onlineUserList")).size()%> </span> 人
三、RequestDispatcher
RequestDispatcher是一個Web資源的包裝器,可以用來把當前request傳遞到該資源,或者把新的資源包括到當前響應中。RequestDispatcher介面中定義了兩個方法:include/forward。
由於<jsp:include>只能指定固定的jsp檔名,不能動態指定jsp檔名。需要把<jsp:include>翻譯為Java code – RequestDispatcher.include();
用法:
<% request.getRequestDispatcher(filename).include(request, response); />
RequestDispatcher.forward()方法將當前的request和response重定向到該RequestDispacher指定的資源。只有在尚未向客戶端輸出響應時才可以呼叫forward()方法,如果頁面快取不為空,在重定向前將自動清除快取。否則將丟擲一個IllegalStateException異常。
JSP中的三種頁面跳轉方式:
1. response.sendRedirect();
2. response.setHeader("location","");
3. <jsp:forward page="" />
相關文章
- springboot線上人數統計Spring Boot
- Servlet監聽器統計線上人數Servlet
- 線上人數統計功能怎麼實現?
- [精選] 統計線上人數,用php 如何來實現 ?PHP
- abc221D 統計線上遊戲人數遊戲
- EBS檢視實時線上人數
- 上線4天《刀塔霸業》Steam同時線上人數破20萬
- Steam全球線上人數峰值突破2500萬
- 2020聖誕節Steam同時線上人數突破2450萬人
- 統計TCP連線數和狀態TCP
- Steam Charts:《怪物獵人:世界》Steam同時線上人數達33.5萬
- 2021年1月2日Steam線上人數峰值近2800萬人
- 華納線上註冊-q=1503964774
- 金寶廳代理註冊-V加:18288129714線上註冊
- 華納娛樂線上註冊-19188190807
- 華納線上註冊-l9188193789
- 自定義開發odoo14的統計線上使用者人數Odoo
- SteamDB:Steam線上人數超3836萬 創歷史新高
- JSP註冊頁面JS
- 華納平臺線上存取款-V加:18288129714線上註冊
- 華納平臺廳線上註冊18469871871
- DrawPad 離線註冊
- 新金寶廳線上註冊-l9188193789
- 華納線上註冊官網-l8469871871
- 華納線上註冊官網-l9188193789
- 浮點數線上轉hex計算工具
- Steam:2020年3月Steam同時線上人數破1972萬
- Hive SQL必刷練習題:同時線上人數問題(*****)HiveSQL
- 線上人數登頂,《命運2》憑什麼讓玩家沉迷?
- 99廳APP下載-V加:18288129714線上註冊APP
- 福利來APP下載-V加:18288129714線上註冊APP
- 金鼎APP下載--V加:18288129714線上註冊APP
- 華納線上註冊官網v-lxch46
- 華納國際線上下載app安裝-V加:18288129714線上註冊APP
- EmEditor 24.4.1 離線註冊分析
- 《賽博朋克2077》Steam好評率83%!線上人數破90萬
- 連線池和連線數詳解
- 線上直播系統原始碼,預設倒數計時,自定義輸入時間倒數計時原始碼
- 史上第一次!Steam同時線上人數突破2000萬