Jsp使用HttpSessionBindingListener实现在线人数记录

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则不能使用这种方式记录在线人数。

时间: 2024-10-16 05:23:47

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

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

在线人数统计方面的实现,最初我的想法是,管理session,如果session销毁了就减少,如果登陆用户了就新增一个,但是如果是用户非法退出,如:未注销,关闭浏览器等,这个用户的session是管理不到的,最后决定用HttpSessionListener接口或HttpSessionBindingListener接口来实现,通过监听session的新建和销毁来控制,详细如下. 先添加登陆的页面index.jsp <%@ page contentType="text/html;charset=

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

一.项目总体介绍 使用Cookie实现商品浏览记录. 要实现这个程序采取的是Model1(Jsp+JavaBean)架构实现,具体步骤: 首先要有个数据库,商品表,操作数据库的一个类DBHelper类 创建实体类(与数据库表一一对应) 创建业务逻辑类(DAO) 创建页面层 二.DBHelper类设计 1 package util; 2 3 import java.sql.Connection; 4 import java.sql.DriverManager; 5 6 public class D

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

1.读取数据库中的记录List<HashMap<String,String>> attributes; 2.Controller构造Model如下: @RequestMapping("display.do") public ModelAndView display(HttpServletRequest request, ModelMap model) { List<HashMap<String, String>> myList = dis

jsp简单实现统计在线人数

//session操作类 public class SessionMap {        private static Map<String,HttpSession> sesMap = new HashMap<String,HttpSession>();        private static final Object flag = new Object();        private SessionMap(){        }        private stati

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

</head><body><%int i = 0;Object number = application.getAttribute("num");if(number == null){ i = 1; application.setAttribute("num",i); }else{ i = Integer.parseInt(application.getAttribute("num").toString());//由

jsp内置对象学习记录

1.session,是一个会话保留在服务器端的对象(默认保留时间为30分钟),所以我们可以在session里面放用户信息以便后续的访问便利(缺点:cookie劫持,导致用户数据泄露).案例:(1)同个用户在30分钟内访问自己权限内的任意页面(不用每次都要提交用户名和密码).(2)购物车的实现 2.pageContext,是一个页面间传递数据的对象,可以通过pageContext读取任意范围内的属性值. 案例:<%=pageContext.findAttribute("name")

java web学习笔记-jsp篇

转载自:http://www.cnblogs.com/happyfans/archive/2015/03/17/4343571.html 1.java web简介 1.1静态页面与动态页面   表现形式 所需技术 静态网页 网页内容固定,不会更新 html,css 动态网页 网页内容由程序动态显示,自动更新 html,css,DB,java/c#/php,javascript,xml,主流的动态网页脚本(jsp,asp.net,php) 1.2搭建java web开发环境 jdk1.7+tomc

使用JSP实现用户登录

本文讲述使用JSP实现用户登录,包括用户登录.注册和退出功能等. 1.系统用例图 2.页面流程图 3.数据库设计 本例使用oracle数据库 创建用户表 包括id,username,password和email,共4个字段 -- Create table create table P_USER ( id VARCHAR2(50) not null, username VARCHAR2(20), password VARCHAR2(20), email VARCHAR2(50) ) tablesp

JavaWeb显示器

本文研究的总结.欢迎转载,但请注明出处:http://blog.csdn.net/pistolove/article/details/44310967 A:监听器的定义 专门用于其它对象身上发生的事件或状态改变进行监听和对应事件处理的对象,当被监听的对象发生改变时,马上採取对应的行动. client请求                                       ServletContext --> Application      上下文对象 由容器创建 web监听器