亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JSP > 正文

JSP如何統計在線人數和注冊人數

2024-09-05 00:23:38
字體:
來源:轉載
供稿:網友
一、統計在線人數
1.監聽器
Java代碼 復制代碼
  1. package com.logcd.listener;   
  2.   
  3. import javax.servlet.ServletContext;    
  4. import javax.servlet.http.HttpSessionEvent;    
  5. import javax.servlet.http.HttpSessionListener;    
  6.   
  7. public class SessionCounter implements HttpSessionListener {    
  8.     public void sessionCreated(HttpSessionEvent event) {    
  9.         ServletContext ctx = event.getSession( ).getServletContext( );    
  10.         Integer numSessions = (Integer) ctx.getAttribute("numSessions");    
  11.         if (numSessions == null) {    
  12.             numSessions = new Integer(1);    
  13.         }else {    
  14.             int count = numSessions.intValue( );    
  15.             numSessions = new Integer(count + 1);    
  16.         }    
  17.         ctx.setAttribute("numSessions", numSessions);    
  18.     }    
  19.     public void sessionDestroyed(HttpSessionEvent event) {    
  20.         ServletContext ctx = event.getSession( ).getServletContext( );    
  21.         Integer numSessions = (Integer) ctx.getAttribute("numSessions");    
  22.         if (numSessions == null) {    
  23.             numSessions = new Integer(0);    
  24.         }    
  25.         else {    
  26.             int count = numSessions.intValue( );    
  27.             numSessions = new Integer(count - 1);    
  28.         }    
  29.         ctx.setAttribute("numSessions", numSessions);    
  30.     }    
  31. }   

說明:實現了HttpSessionListener定義的兩個方法:sessionCreated()和sessionDestroyed()。這兩個方法可以監聽到當前應用中session的創建和銷毀情況。
以下兩種情況下就會發生sessionDestoryed(會話銷毀)事件:
(1)執行session.invalidate()方法時。
(2)如果用戶長時間沒有訪問服務器,超過了會話最大超時時間,服務器就會自動銷毀超時的session。
Xml代碼 復制代碼
  1. <session-config>  
  2.     <session-timeout>1</session-timeout>  
  3. </session-config>  
時間單位是一分鐘,并且只能是整數,如果是零或負數,那么會話就永遠不會超時。
2.web.xml中配置
Xml代碼 復制代碼
  1. <listener>    
  2.      <listener-class>com.logcd.listener.SessionCounter</listener-class>    
  3. </listener>   

3.jsp調用
Html代碼 復制代碼
  1. 目前共有<span class="salient"> <%=application.getAttribute("numSessions")%> </span>人在線  

二、統計注冊人數
1.監聽器
Java代碼 復制代碼
  1. package com.logcd.listener;   
  2.   
  3. import java.util.HashMap;   
  4. import java.util.Map;   
  5.   
  6. import javax.servlet.ServletContext;   
  7. import javax.servlet.http.HttpSession;   
  8. import javax.servlet.http.HttpSessionBindingEvent;   
  9. import javax.servlet.http.HttpSessionBindingListener;   
  10.   
  11. public class OnlineUserBindingListener implements HttpSessionBindingListener{   
  12.   
  13.     private String userId;   
  14.     private String userName;   
  15.        
  16.     public OnlineUserBindingListener(String userId,String username){   
  17.         this.setUserId(userId);   
  18.         this.setUserName(userName);   
  19.     }   
  20.        
  21.     @SuppressWarnings("unchecked")   
  22.     public void valueBound(HttpSessionBindingEvent event) {   
  23.         HttpSession session = event.getSession();   
  24.         ServletContext application = session.getServletContext();   
  25.   
  26.         // 把用戶放入在線列表   
  27.         Map onlineUserList = (Map) application.getAttribute("onlineUserList");   
  28.         // 第一次使用前,需要初始化   
  29.         if (onlineUserList == null) {   
  30.             onlineUserList = new HashMap();   
  31.             application.setAttribute("onlineUserList", onlineUserList);   
  32.         }   
  33.         onlineUserList.put(this.userId, this.userName);   
  34.            
  35.     }   
  36.   
  37.     public void valueUnbound(HttpSessionBindingEvent event) {   
  38.         HttpSession session = event.getSession();   
  39.         ServletContext application = session.getServletContext();   
  40.   
  41.         // 從在線列表中刪除用戶   
  42.         Map onlineUserList = (Map) application.getAttribute("onlineUserList");   
  43.         onlineUserList.remove(this.userId);   
  44.            
  45.     }   
  46.   
  47.   
  48.     public String getUserId() {   
  49.         return userId;   
  50.     }   
  51.   
  52.     public void setUserId(String userId) {   
  53.         this.userId = userId;   
  54.     }   
  55.   
  56.     public String getUserName() {   
  57.         return userName;   
  58.     }   
  59.   
  60.     public void setUserName(String userName) {   
  61.         this.userName = userName;   
  62.     }   
  63.   
  64. }  

說明:實現了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
Java代碼 復制代碼
  1. <%@ page language="java" import="java.util.*" pageEncoding="gbk"%>   
  2. <%@ page import="com.logcd.listener.OnlineUserBindingListener"%>   
  3. <%   
  4.     String path = request.getContextPath();   
  5.     String basePath = request.getScheme() + "://"  
  6.             + request.getServerName() + ":" + request.getServerPort()   
  7.             + path + "/";   
  8.     String userId = "2000090603";   
  9.     String userName = "LogCN";   
  10.     session.setAttribute(userId,userName);   
  11.     session.setAttribute("onlineUserBindingListener"new OnlineUserBindingListener(userId,userName));   
  12.     response.sendRedirect("counter.jsp");   
  13. %>  

(2)counter.jsp
Java代碼 復制代碼
  1. <%@ page language="java" import="java.util.*" pageEncoding="gbk"%>   
  2. 注冊用戶<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="" />
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久久久日韩精品久久久男男| 亚洲第一网中文字幕| 少妇精69xxtheporn| 国产一级揄自揄精品视频| 国产精品美女呻吟| 97在线观看免费高清| 欧美电影免费观看高清完整| 精品久久久久久亚洲国产300| 欧美激情视频网| zzijzzij亚洲日本成熟少妇| 色偷偷综合社区| 亚洲精品国产suv| 中文字幕久热精品视频在线| 日韩网站免费观看高清| 国产精品无码专区在线观看| 91色精品视频在线| 欧美性jizz18性欧美| 亚洲春色另类小说| 国产亚洲美女精品久久久| 亚洲国产婷婷香蕉久久久久久| 成人字幕网zmw| 亚洲精品中文字幕女同| 久久久精品免费| 色综合老司机第九色激情| 国产日韩欧美综合| 午夜精品蜜臀一区二区三区免费| 欧美高跟鞋交xxxxxhd| 国产成人在线视频| 欧美日韩国产丝袜另类| 国产91久久婷婷一区二区| 久久精品视频在线| 久久国内精品一国内精品| 久久视频免费观看| 日韩专区在线播放| 欧美国产精品人人做人人爱| 欧美成人免费大片| 情事1991在线| 97香蕉超级碰碰久久免费软件| 成人自拍性视频| 精品国产视频在线| 久久久噜噜噜久久| 欧美精品久久久久久久| 亚洲一级片在线看| 国产午夜精品视频免费不卡69堂| 高跟丝袜欧美一区| 国产精品日韩久久久久| 成人黄色片网站| 欧美日韩福利电影| 美女扒开尿口让男人操亚洲视频网站| 国产精品精品久久久| 91精品国产自产91精品| 成人黄色av播放免费| 日本久久久久久| 日本韩国在线不卡| 国产亚洲欧美aaaa| 欧美夜福利tv在线| 国产精品美腿一区在线看| 国产精品va在线播放我和闺蜜| 亚洲a中文字幕| 欧美日韩精品在线播放| 中文字幕在线观看日韩| 亚洲iv一区二区三区| 91理论片午午论夜理片久久| 欧美成人中文字幕| 亚洲精品美女网站| 欧美国产精品日韩| 午夜免费在线观看精品视频| 国产欧美精品在线播放| 欧美老女人xx| 日韩欧美高清视频| 九九九热精品免费视频观看网站| 69久久夜色精品国产69乱青草| 日韩欧美aⅴ综合网站发布| 亚洲女人被黑人巨大进入al| 92国产精品久久久久首页| 亚洲精品免费网站| 亚洲激情成人网| 日韩日本欧美亚洲| 亚洲男人的天堂在线播放| 国产91露脸中文字幕在线| 91在线|亚洲| 精品国产欧美成人夜夜嗨| 欧美视频中文在线看| 91社区国产高清| 91亚洲国产成人精品性色| 亚洲的天堂在线中文字幕| 国产精品三级久久久久久电影| 欧美激情在线狂野欧美精品| 亚洲第一级黄色片| 亚洲天堂男人的天堂| 久久久久久久国产精品| 国产精品都在这里| 欧美日韩免费区域视频在线观看| 亚洲情综合五月天| 中文字幕av一区| 2020久久国产精品| 久久精品国产亚洲精品| 亚洲天堂成人在线| 欧美日韩中国免费专区在线看| 羞羞色国产精品| 国产日韩精品入口| 亚洲淫片在线视频| 久久影院在线观看| 欧美视频在线观看免费网址| 日韩资源在线观看| 久久影院中文字幕| 奇米成人av国产一区二区三区| 国语自产精品视频在线看| 欧美日韩国产一区在线| 亚洲欧洲国产精品| 久久精品国产清自在天天线| 中文综合在线观看| 狠狠操狠狠色综合网| 97视频在线观看成人| 在线观看91久久久久久| 欧美尤物巨大精品爽| 国产精品91久久久久久| 亚洲自拍偷拍区| 中文字幕亚洲欧美一区二区三区| 欧美在线精品免播放器视频| 国产一区二区香蕉| 在线播放日韩专区| 国产精品入口日韩视频大尺度| 国产日产亚洲精品| 国产精品极品美女在线观看免费| 久久久久久久久久久久av| 一区二区三区黄色| 亚洲自拍高清视频网站| 国产日韩在线视频| 一区二区成人av| 欧美国产中文字幕| 国产男女猛烈无遮挡91| 中文字幕日韩欧美在线视频| 日韩电影免费在线观看| 亚洲自拍偷拍第一页| 亚洲色图美腿丝袜| 国内久久久精品| 亚洲国产又黄又爽女人高潮的| 91视频国产精品| 伊人久久久久久久久久久久久| 国产精品成人观看视频国产奇米| 亚洲三级 欧美三级| 在线观看视频亚洲| 日韩av不卡电影| 在线观看精品自拍私拍| 精品中文字幕久久久久久| 91久久久久久久久久久久久| 一区二区成人精品| 久久综合久久八八| 国产精品国模在线| 国产精品最新在线观看| 精品人伦一区二区三区蜜桃免费| 国产一区二区三区久久精品| 欧美孕妇性xx| 日韩在线视频观看正片免费网站| 亚洲精品国产精品自产a区红杏吧| 国产精品自产拍在线观看中文| 午夜精品久久久久久久久久久久久| 91丨九色丨国产在线| 亚洲三级免费看| 欧美黄色www| 精品国产电影一区| 91精品中国老女人| 欧美精品免费在线观看|