欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

[轉(zhuǎn)]jsp統(tǒng)計(jì)在線人數(shù)和在線注冊(cè)人數(shù)

系統(tǒng) 1905 0

一、統(tǒng)計(jì)在線人數(shù)
1.監(jiān)聽(tīng)器

Java代碼 復(fù)制代碼
  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. }???
    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); 
    } 
} 
  


說(shuō)明:實(shí)現(xiàn)了HttpSessionListener定義的兩個(gè)方法:sessionCreated()和sessionDestroyed()。這兩個(gè)方法可以監(jiān)聽(tīng)到當(dāng)前應(yīng)用中session的創(chuàng)建和銷毀情況。
以下兩種情況下就會(huì)發(fā)生sessionDestoryed(會(huì)話銷毀)事件:
(1)執(zhí)行session.invalidate()方法時(shí)。
(2)如果用戶長(zhǎng)時(shí)間沒(méi)有訪問(wèn)服務(wù)器,超過(guò)了會(huì)話最大超時(shí)時(shí)間,服務(wù)器就會(huì)自動(dòng)銷毀超時(shí)的session。

Xml代碼 復(fù)制代碼
  1. < session-config > ??
  2. ???? < session-timeout > 1 </ session-timeout > ??
  3. </ session-config > ??
    <session-config>
    <session-timeout>1</session-timeout>
</session-config>

  

時(shí)間單位是一分鐘,并且只能是整數(shù),如果是零或負(fù)數(shù),那么會(huì)話就永遠(yuǎn)不會(huì)超時(shí)。
2.web.xml中配置

Xml代碼 復(fù)制代碼
  1. < listener > ? ??
  2. ????? < listener-class > com.logcd.listener.SessionCounter </ listener-class > ? ??
  3. </ listener > ???
    	<listener> 
      <listener-class>com.logcd.listener.SessionCounter</listener-class> 
	</listener> 
  


3.jsp調(diào)用

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


二、統(tǒng)計(jì)注冊(cè)人數(shù)
1.監(jiān)聽(tīng)器

Java代碼 復(fù)制代碼
  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. }??
    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;
	}

}

  


說(shuō)明:實(shí)現(xiàn)了HttpSessionBindingListener接口,接口中共定義了兩個(gè)方法:valueBound()和valueUnbound(),分別對(duì)應(yīng)數(shù)據(jù)綁定,和取消綁定兩個(gè)事件。
所謂對(duì)session進(jìn)行數(shù)據(jù)綁定,就是調(diào)用session.setAttribute()把HttpSessionBindingListener保存進(jìn)session中。
HttpSessionListener只需要設(shè)置到web.xml中就可以監(jiān)聽(tīng)整個(gè)應(yīng)用中的所有session。HttpSessionBindingListener必須實(shí)例化后放入某一個(gè)session中,才可以進(jìn)行監(jiān)聽(tīng)。

從監(jiān)聽(tīng)范圍上比較,HttpSessionListener設(shè)置一次就可以監(jiān)聽(tīng)所有session,HttpSessionBindingListener通常都是一對(duì)一的。

valueUnbound的觸發(fā)條件是以下三種情況:
(1)執(zhí)行session.invalidate()時(shí)。
(2)session超時(shí),自動(dòng)銷毀時(shí)。
(3)執(zhí)行session.setAttribute("onlineUserListener", "其他對(duì)象");或session.removeAttribute("onlineUserListener");將listener從session中刪除時(shí)。
因此,只要不將listener從session中刪除,就可以監(jiān)聽(tīng)到session的銷毀。

2.jsp調(diào)用
(1)login.jsp

Java代碼 復(fù)制代碼
  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. %>??
    <%@ 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

Java代碼 復(fù)制代碼
  1. <%@?page?language= "java" ? import = "java.util.*" ?pageEncoding= "gbk" %> ??
  2. 注冊(cè)用戶<span? class = "salient" ><%=((Map)application.getAttribute( "onlineUserList" )).size()%>?</span>?人??

[轉(zhuǎn)]jsp統(tǒng)計(jì)在線人數(shù)和在線注冊(cè)人數(shù)


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 激情成人综合网 | 精品国产影院 | 成人黄色小视频网站 | 久久人人做 | 午夜久久久 | 青青青青娱乐 | 污视频在线观看网站 | 国产精品久久婷婷六月丁香 | 日本黄色不卡视频 | 一级黄片毛片 | 午夜寂寞少妇aaa片毛片 | 在线天堂中文在线资源网 | 久久综合亚洲 | v片在线免费观看 | 日本黄页在线观看 | 亚洲成av | 亚洲黑人在线观看 | 欧美精品久久久久久久久老牛影院 | 免费看成年视频网页 | 女人被狂躁视频免费网站 | 一级做a爱片特黄在线观看yy | 午夜影院小视频 | 999精品免费视频观看 | 欧美精品成人一区二区三区四区 | 欧洲成人综合网 | 久久日本精品99久久久久 | 嫩草影院在线入口 | 2016天天干 | 看中国国产一级毛片真人视频 | 正在播放国产无套露脸 | 一卡二卡三免费乱码 | 欧美五月| 日本三级一区二区 | 麻豆传媒地址 | www.五月婷| 中文字幕精品一区 | 2019偷偷狠狠的日日 | 这里只有精品视频 | 96自拍视频 | 97风流梦电影 | 香蕉久草 |