onLineUser.java 继承HttpSessionBindingListener实现在线人数记录功能

  1. package com.trs;
  2.  
  3. import java.util.*;
  4. import javax.servlet.http.*;
  5. import javax.servlet.*;
  6.  
  7. /**
  8. *HttpSessionBindingListener接口有两方需要实现的方法:
  9. *public synchronized void valueBound(HttpSessionBindingEvent httpsessionbindingevent)
  10. *public synchronized void valueUnbound(HttpSessionBindingEvent httpsessionbindingevent)
  11. *Session创建的时候Servlet容器将会调用valueBound方法;Session删除的时候则调用valueUnbound方法.
  12. */
  13. public class onLineUser implements HttpSessionBindingListener
  14. {
  15. public onLineUser()
  16. {
  17. }
  18.  
  19. //保存在线用户的向量
  20. private Vector users=new Vector();
  21.  
  22. //得到用户总数
  23. public int getCount()
  24. {
  25. users.trimToSize();
  26. return users.capacity();
  27. }
  28.  
  29. //判断是否存在指定的用户
  30. public boolean existUser(String userName)
  31. {
  32. users.trimToSize();
  33. boolean existUser=false;
  34. for (int i=0;i
  35. {
  36. if (userName.equals((String)users.get(i)))
  37. {
  38. existUser=true;
  39. break;
  40. }
  41. }
  42. return existUser;
  43. }
  44.  
  45. //删除指定的用户
  46. public boolean deleteUser(String userName)
  47. {
  48. users.trimToSize();
  49. if(existUser(userName))
  50. {
  51. int currUserIndex=-1;
  52. for(int i=0;i
  53. {
  54. if(userName.equals((String)users.get(i)))
  55. {
  56. currUserIndex=i;
  57. break;
  58. }
  59. }
  60. if (currUserIndex!=-1)
  61. {
  62. users.remove(currUserIndex);
  63. users.trimToSize();
  64. return true;
  65. }
  66. }
  67. return false;
  68. }
  69.  
  70. //得到当前在线用户的列表
  71. public Vector getOnLineUser()
  72. {
  73. return users;
  74. }
  75.  
  76. public void valueBound(HttpSessionBindingEvent e)
  77. {
  78. users.trimToSize();
  79. if(!existUser(e.getName()))
  80. {
  81. users.add(e.getName());
  82. System.out.print(e.getName()+"\t 登入到系统\t"+(new Date()));
  83. System.out.println(" 在线用户数为:"+getCount());
  84. }else
  85. System.out.println(e.getName()+"已经存在");
  86. }
  87.  
  88. public void valueUnbound(HttpSessionBindingEvent e)
  89. {
  90. users.trimToSize();
  91. String userName=e.getName();
  92. deleteUser(userName);
  93. System.out.print(userName+"\t 退出系统\t"+(new Date()));
  94. System.out.println(" 在线用户数为:"+getCount());
  95. }
  96. }

logout.jsp

  1. <%@ page contentType="text/html;charset=GB2312" pageEncoding="GBK"%>
  2. <%@ page import="com.trs.onLineUser,java.util.*" %>
  3. <jsp:useBean id="onlineuser" class="com.trs.onLineUser" scope="application"/>
  4. <html>
  5. <head>
  6. <title>show</title>
  7. </head>
  8. <body>
  9. <%
  10. String name=(String)session.getValue("name");
  11. if(name!=null && name.length()!=0)
  12. {
  13. if(onlineuser.deleteUser(name))
  14. out.println(name+"已经退出系统!");
  15. else
  16. out.println(name+"没有登陆到系统!");
  17. }
  18. %>
  19. </body>
  20. </html>

online.jsp

  1. <%@ page contentType="text/html;charset=GB2312" pageEncoding="GBK"%>
  2. <%@page import="com.trs.onLineUser,java.util.*" %>
  3. <html>
  4. </body>
  5. <%
  6. String name=request.getParameter("name");
  7. String password=request.getParameter("password");
  8.  
  9. if(name!=null && password!=null)
  10. {
  11. Cookie cookie1=new Cookie("name", name);
  12. cookie1.setMaxAge(100000);
  13. response.addCookie(cookie1);
  14.  
  15. Cookie cookie2=new Cookie("password", password);
  16. cookie2.setMaxAge(100000);
  17. response.addCookie(cookie2);
  18. out.println("完成书写Cookie!");
  19. }
  20. else
  21. {
  22. out.println("书写失败!");
  23. }
  24. %>
  25. </body>
  26. </html>

需要说明的是这种方式适合只有单台服务器的小网站使用,如果网站有多台web server则不能使用这种方式记录在线人数。

Jsp使用HttpSessionBindingListener实现在线人数记录的更多相关文章

  1. 用HttpSessionListener与HttpSessionBindingListener实现在线人数统计

    在线人数统计方面的实现,最初我的想法是,管理session,如果session销毁了就减少,如果登陆用户了就新增一个,但是如果是用户非法退出,如:未注销,关闭浏览器等,这个用户的session是管理不 ...

  2. [转]用HttpSessionListener与HttpSessionBindingListener实现在线人数统计

    原文链接:http://www.cnblogs.com/shencheng/archive/2011/01/07/1930227.html 下午比较闲(其实今天都很闲),想了一下在线人数统计方面的实现 ...

  3. Java遇见HTML——JSP篇之商品浏览记录的实现

    一.项目总体介绍 使用Cookie实现商品浏览记录. 要实现这个程序采取的是Model1(Jsp+JavaBean)架构实现,具体步骤: 首先要有个数据库,商品表,操作数据库的一个类DBHelper类 ...

  4. springMVC笔记:jsp页面获取后台数据记录列表

    1.读取数据库中的记录List<HashMap<String,String>> attributes; 2.Controller构造Model如下: @RequestMappi ...

  5. JSP标签使用的代码记录——《%= %》(神奇的CSDN为啥标题不让打英文的尖括号)

    关于JSP的一些标签,在用到的时候有些生疏,就去找了找资源重新温习了一下. 附上两个JSP<%= %>标签的博客,同时也记录当前项目里用到的方法. jsp页面中<%@ %>.& ...

  6. jsp简单实现统计在线人数

    通过重写HttpSessionListener接口实现 //session操作类 public class SessionMap { private static Map<String,Http ...

  7. jsp利用application统计在线人数的方法

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"% ...

  8. 用jsp的application写一个记录用户登陆网站的数量

    </head><body><%int i = 0;Object number = application.getAttribute("num");if ...

  9. jsp内置对象学习记录

    1.session,是一个会话保留在服务器端的对象(默认保留时间为30分钟),所以我们可以在session里面放用户信息以便后续的访问便利(缺点:cookie劫持,导致用户数据泄露).案例:(1)同个 ...

随机推荐

  1. CSS 笔记——列表表格

    6. 列表表格 -> 列表 (1)list-style 基本语法 list-style : list-style-image || list-style-position || list-sty ...

  2. 「CSA49」Card Collecting Game

    「CSA49」Card Collecting Game 题目大意:有 \(n\) 种卡片,每种有 \(b_i\) 张,如果一个人集齐 \(k\) 张第 \(i\) 种卡片,那么其能获得的得分是 \(\ ...

  3. bzoj1977 次小生成树

    Description 小 C 最近学了很多最小生成树的算法,Prim 算法.Kurskal 算法.消圈算法等等. 正当小 C 洋洋得意之时,小 P 又来泼小 C 冷水了.小 P 说,让小 C 求出一 ...

  4. 2015 UESTC 搜索专题N题 韩爷的梦 hash

    韩爷的梦 Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/contest/show/61 Descrip ...

  5. CodeM资格赛1

    题目描述 美团外卖的品牌代言人袋鼠先生最近正在进行音乐研究.他有两段音频,每段音频是一个表示音高的序列.现在袋鼠先生想要在第二段音频中找出与第一段音频最相近的部分. 具体地说,就是在第二段音频中找到一 ...

  6. mysqldump之字符集问题解决

    最近导数据的需求真多,年底了大家都要做分析吗?近期使用mysqldump导出的中文出现乱码问题. mysqldump -uroot -ppassword -S /tmp/mysql9991.sock ...

  7. 帝国cms安装在二级目录 构建中英文网站

    帝国cms是很好的建站工具,一般都是安装在根目录,但是有时候租一个空间,要搭建两个网站,或者中英文双语的网站,肯定得用到二级目录 帝国cms安装二级目录步骤 1,讲安装包解压缩到要安装的二级目录下 2 ...

  8. HTML、XML、XHTML 有什么区别?

    HTML即是超文本标记语言(Hyper Text Markup Language),是最早写网页的语言,但是由于时间早,规范不是很好,大小写混写且编码不规范,是语法较为松散的.不严格的Web语言 XH ...

  9. OSChina.net 的 Tomcat 配置 server.xml 参考

    这是目前 oschina.net 正在使用的 tomcat 的 server.xml 的配置文件内容 <Server port="9005" shutdown="S ...

  10. nodejs之处理GET请求

    一个简单的httpserver.接收get请求,并返回解析之后的数据. 以下是服务的代码: var http = require("http"); var url = requir ...