- 浏览: 1010321 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (394)
- OSGI (14)
- 多线程 (10)
- 数据库 (30)
- J2ME (1)
- JAVA基础知识 (46)
- 引用包 (1)
- 设计模式 (7)
- 工作流 (2)
- Ubuntu (7)
- 搜索引擎 (6)
- QT (2)
- Ubuntu下编程 (1)
- 小程序 (2)
- UML (1)
- Servlet (10)
- spring (16)
- IM (12)
- 文档视频转为flash格式在线播放 (19)
- Maven (8)
- 远程调用 (2)
- PHPRPC (1)
- EXTJS学习 (2)
- Hibernate (16)
- 技术文章 (38)
- flex (5)
- 海量数据处理 (5)
- FTP (8)
- JS (10)
- Struts (1)
- hibernate search (13)
- JQuery (2)
- EMail (3)
- 算法 (4)
- SVN (7)
- JFreeChart (4)
- 面试 (4)
- 正规表达式 (2)
- 数据库性能优化 (10)
- JVM (6)
- Http Session Cookie (7)
- 网络 (12)
- Hadoop (2)
- 性能 (1)
最新评论
-
hy1235366:
能够随便也发一下,你退火算法程序使用的DistanceMatr ...
模拟退火算法总结(含例子)(转) -
梅强强:
感谢分享。。帮大忙了
swftools转换文件时线程堵塞问题的解决方法 -
wenlongsust:
openoffice和文件不在同一个服务器上,用过吗?
[JODConverter]word转pdf心得分享(转) -
2047699523:
如何在java Web项目中开发WebService接口htt ...
利用Java编写简单的WebService实例 -
abingpow:
唉,看起来好像很详细很不错的样子,可惜不是篇面向初学者的文章, ...
Spring与OSGi的整合(二)(转)
下面为我的测试例子,首先建个web工程,例子中程序包括:OnLineUser.java ,login.jsp ,logout.jsp,onLineUser.jsp,closePage.jsp五个文件:
1 OnLineUser.java
package org.lab24.servlet; /**//* * onLineUser类实现HttpSessionBindingListener接口 * onLineUser类将具有HttpSessionBindingListener接口的特有属性 * 那么HttpSessionBindingListener接口的特有属性是什么呢? * HttpSessionBindingListener接口具有的两个空函数 * public void valueBound(HttpSessionBindingEvent e) * public void valueUnBound(HttpSessionBindingEvent e) * * onLineUser实现一些方法:获取在线用户数 * */ import javax.servlet.http.*; import java.util.*; public class OnLineUser implements HttpSessionBindingListener { public OnLineUser() { } private Vector users = new Vector(); public int getCount() { users.trimToSize();// 调整Vector users的容量为Vector users的大小 return users.capacity();// 返回users的容量 } public boolean existUser(String userName) { users.trimToSize(); boolean existUser = false; for (int i = 0; i < users.capacity(); i++) { if (userName.equals((String) users.get(i))) { existUser = true; break; } } return existUser; } public boolean deleteUser(String userName) { users.trimToSize(); if (existUser(userName)) { int currUserIndex = -1; for (int i = 0; i < users.capacity(); i++) { if (userName.equals((String) users.get(i))) { currUserIndex = i; break; } } if (currUserIndex != -1) { users.remove(currUserIndex); users.trimToSize(); return true; } } return false; } public Vector getOnLineUser() { return users; } public void valueBound(HttpSessionBindingEvent e) { users.trimToSize(); System.out.println("请求:::::::::::" + e.getName()); if (!existUser(e.getName())) { users.add(e.getName()); System.out.print(e.getName() + " 登入到系统 " + (new Date())); System.out.println(" 在线用户数为:" + getCount()); } else { System.out.println(e.getName() + "已经存在"); } } public void valueUnbound(HttpSessionBindingEvent e) { users.trimToSize(); String userName = e.getName(); deleteUser(userName); System.out.print(userName + " 退出系统 " + (new Date())); System.out.println(" 在线用户数为:" + getCount()); } }
2 login.jsp
<%@ page contentType="text/html;charset=gb2312"%> <html> <head> <title>测试HttpSessionBindingListener接口</title> <script type="text/javascript"> function check(){ var userName = document.getElementById("userID").value; if("userName".equals(userName)) return false; alert(userName); return true; } </script> </head> <body> <!-- 这里要注意的是这里使用了get的方式,因为这里没有使用spring mvc或struts来中转处理,所以在js获取请求的参数的时候较困难,所以这里设置为get方式 --> <form name="login" method="get" action="onLineUser.jsp"> <input type=text name="username" id="userID"> <script type="text/javascript"> document.getElementById("userID").focus();//期望的元素一出现,即定位焦点 </script> <input type=submit name="submit" value="登陆" onClick="check()"> </form> </body> </html>
3 onLineUser.jsp
<%@ page contentType="text/html;charset=gb2312"%> <%@page import="java.util.*,org.lab24.servlet.*"%> <%@page import="javax.servlet.http.*"%> <jsp:useBean id="onlineuser" class="org.lab24.servlet.OnLineUser" scope="application" /> <html> <head> <title>搞定JSP在线人数</title> <% String username = request.getParameter("username"); %> <script type="text/javascript"> var userName = ""; window.onload = function(){ userName=getQueryParameter("username"); } //获取指定参数名的参数值 function getQueryParameter(qs) { var s = location.href; s = s.replace("?","?&").split("&");//这样可以保证第一个参数也能分出来 var re = ""; for(i=1;i<s.length;i++) if(s[i].indexOf(qs+"=")==0) re = s[i].replace(qs+"=","");//取代前面的参数名,只剩下参数值 return re; } window.onbeforeunload=function(){ var myurl = "closePage.jsp?username="+ userName; window.open(myurl,"_blank"); } </script> </head> <body> <center> <h1> 登陆成功,欢迎您访问! </h1> </center> <% session = request.getSession(false); %> <% if (onlineuser.existUser(username)) { out.println("用户<font color=red>" + username + "</font>已经登陆!"); } else { session.setMaxInactiveInterval(600);//Sesion有效时长,以秒为单位 session.setAttribute(session.getId(),username);//这个是为了关闭用户页面里跳转到BeforeClosePage这个servlet而设置的,这个不能用request来设置它的值,request应该是页面到页面才有效的,跳到server那边再处理好像就没效了 session.setAttribute(username, onlineuser);//这个应该是将用户加入HttpSessionBindingListener管理,就也是触发onlineuser这个listener的valueBound方法,username作业参数传进去 out.println("欢迎新用户:<font color=red>" + username + "</font>登陆到系统!"); } out.println("<br>当前在线用户人数:<font color=red>" + onlineuser.getCount() + "</font><br>"); Vector vt = onlineuser.getOnLineUser(); Enumeration e = vt.elements(); out.println("在线用户列表"); out.println("<table border=1>"); out.println("<tr><td>用户名</td></tr>"); /*while(e.hasMoreElements()){ out.println("<tr><td>"); out.println((String)e.nextElement()+"<br>"); out.println("</td></tr>"); } 下面的方法也是可以的,这两种方法都是可行的,其实Iterator是Enumeration的子类 */ for (Iterator it = vt.iterator(); it.hasNext();) { out.println("<tr><td>"); out.println((String) it.next() + "<br>"); out.println("</td></tr>"); } out.println("</table>"); %> <center> <p> elapsed制作 </p> <p> </p> <% out.println("<p><a href=''logout.jsp?username=" + username + "''>退出系统</a></p>"); %> </center> </body> </html>
4 logout.jsp
<%@ page contentType="text/html;charset=gb2312"%> <%@ page import="org.lab24.servlet.OnLineUser,java.util.*"%> <jsp:useBean id="onlineuser" class="org.lab24.servlet.OnLineUser" scope="application" /> <html> <head> <title>搞定JSP在线人数</title> </head> <body> <center> <h1> 欢迎您访问! </h1> </center> <% String username = request.getParameter("username"); if (username != null && onlineuser.deleteUser(username)) { out.println(username + "已经退出系统!"); session.removeAttribute(username); out.println("<script>window.location=\"login.jsp\";</script>"); } else { out.println(username + "已经退出系统!"); out.println("<script>window.location=\"login.jsp\";</script>"); } %> <center> <p> elapsed制作 </p> <p> </p> <p> <a href="logout.jsp">退出系统</a> </p> </center> </body> </html>
5 closePage.jsp
<%@ page contentType="text/html;charset=gb2312"%> <%@page import="javax.servlet.http.*"%> <jsp:useBean id="onlineuser" class="org.lab24.servlet.OnLineUser" scope="application" /> <% //下面的方式会把所的用户赶下线,这个可以是由于没指定一个用户名给valueUnbound方法,所以当使用invalidate方法时,会将所有的用户都赶下线了 //HttpSession session2 = request.getSession(false);//变量名要是最为session会抛异常的。 //HttpSession session = request.getSession(); //session2.invalidate(); String username = request.getParameter("username"); if (username != null && onlineuser.deleteUser(username)) { out.println(username + "已经退出系统!"); session.removeAttribute(username); out.println("<script>window.location=\"login.jsp\";</script>"); } else { out.println(username + "已经退出系统!"); out.println("<script>window.location=\"login.jsp\";</script>"); } %>
6 web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <listener> <listener-class>org.lab24.servlet.OnLineUser</listener-class> </listener> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>
还可以参照一下这篇文章:
使用HttpSessionBindingListener 方法http://yufenfei.iteye.com/blog/439050
- OnlineCounter.rar (8.8 KB)
- 下载次数: 32
发表评论
-
提取html内容放入xml文件时空格问题
2011-05-24 17:09 2659由于项目的需要,将网站上的信息抓取下来,提取出想要的信息,然后 ... -
简述URI和URL区别(转)
2011-04-20 16:23 1418URL:(Uniform Resoure Locato ... -
jsp页面乱码解决方案及编码设置问题(转)
2011-03-27 15:46 1841经常遇到关于JSP页面乱码的问题,在网上也查了相关的帖子,故在 ... -
使用JSTL标签异常
2011-01-02 09:48 1850我使用JSTL标签,如下所示: <c:when ... -
HSQL入门及使用指南 (转)
2010-12-27 22:29 2191HSQL可以到官方网站 ... -
使用POI读取Word207和Excel2007的例子 (转)
2010-12-26 16:19 2618天在写全文检索功能时,POI读取Word2007和Excel2 ... -
SSH session连接关闭问题的解决(转)
2010-12-15 22:12 21532008-07-20 22:25:27,531 INF ... -
svn和myeclipse使用搜狗浏览器代理
2010-12-11 16:42 18141 在svn里的setting功能选项中选择Network,勾 ... -
Kissy Suggest 自动提示例子
2010-12-10 14:45 3823由淘宝团队开发出来的Kissy Suggest 自动提示组件是 ... -
计算机开机启动过程详解(转)
2010-12-10 13:22 13901、http://product.zdnet.com. ... -
更强的自动补全提示:提示补全组件:Kissy Suggest(转)
2010-12-09 16:25 1059去年针对谷歌的搜索提示,发过一篇文章:从谷歌的一个Bug说 ... -
磁盘分区与文件系统(转)
2010-12-09 09:38 2046一个磁盘是分成一个个扇区来存放信息,整个磁盘的第一个扇区是作 ... -
QQ通信原理(转)
2010-12-02 21:52 6659QQ通信原理我研究的是QQ ... -
邮件激活
2010-11-17 09:34 1457今天看了一下公司做的网站,看到有关邮件激活的程序,就做下笔记。 ... -
cookie的简单使用
2010-10-29 11:13 1575一、cookie的作用 在 ... -
Cookie工作原理(转)
2010-10-29 09:30 1824Cookies基础 Cookies是 ... -
swfobject的使用
2010-10-26 09:54 32231 swfobject可以将swf文件嵌入到网页内,它是一个j ... -
java获取当前工程名(转)
2010-10-24 09:14 1628String projectname = System.get ... -
利用Java编写简单的WebService实例(转)
2010-10-22 15:30 2740/* * File name: TestHell ... -
利用Java编写简单的WebService实例
2010-10-22 14:55 87119使用Axis编写WebService比较简单,就我 ...
相关推荐
通过上述方式,`HttpSessionBindingListener`可以帮助我们实现对在线用户的精确监控和统计。同时,它还能用于其他场景,比如缓存管理、个性化数据跟踪等。理解并熟练运用这个接口,能够提升Java Web应用的功能性和...
在Java Web开发中,HttpSessionBindingListener是一个重要的接口,用于监听HttpSession中的绑定和解绑事件。在本例中,我们将使用HttpSessionBindingListener来记录登陆者的用户名和登录时间到数据库中。 首先,让...
jsp 统计在线人数实例,是个完整的项目实例,部署即可查看效果! 通过使用:HttpSessionListener、HttpSessionBindingListener来实现. valueBound 方法登录触发。 valueUnbound 方法退出触发。
- 使用`HttpSessionListener`可以监控用户登录状态的变化,及时更新在线用户列表,从而确保各个子系统之间共享正确的用户状态信息。 - 通过`HttpSessionBindingListener`可以在用户登录时绑定必要的认证信息至会话中...
我们可以自定义一个拦截器,检查每次请求的session状态,如果发现有异地登录的情况,就触发`HttpSessionBindingListener`的相关方法,通知用户已注销当前设备的登录状态。 iBatis作为持久层框架,主要用于数据库...
- `valueBound(HttpSessionBindingEvent e)` 当用户登录时被调用,将用户名添加到`users`向量并更新在线用户数。 - `valueUnbound(HttpSessionBindingEvent e)` 当用户注销时被调用,从`users`向量中移除用户名并...
这个功能的完成,主要是利用一个实现了 HttpSessionBindingListener 接口的对象,当这个对象被绑定到 Session 中或者从 Session 中被删除时,更新当前在线的用户名单。 在本例子中,我们使用 Java 语言和 ...
在JSP中获取当前所有在线用户列表时,Servlet API并未提供直接获取Session列表的方法。此时,可以利用Servlet监听器(Listener)来实现这一功能。在Servlet 2.2中,我们可以使用`HttpSessionBindingListener`接口,...
基于ServletJSP的部门管理系统 项目简介 本项目是一个基于Servlet和JSP技术的部门管理系统,主要... 通过HttpSessionBindingListener接口监听用户会话的绑定和解除绑定事件,实时更新在线用户数量。 3. 部门管理
程序开发中,经常需要对某些事件进行监听,比如一一个网站页面可能要动态监听当前在线用户有 哪些以及在线总人数,这个就可以使用到Servlet进行监听用户的登陆退出。 3、需求分析 程序开发中,经常需要对某些事件...
为了实时获取用户的在线状态,项目中采用了`HttpSessionBindingListener`接口。当用户登录时,该接口会被用来监听会话绑定事件,从而记录用户登录信息;当用户注销或会话超时时,监听器则会触发会话解除绑定事件,...
4. **获取在线用户列表**:`getOnLineUser()`方法返回当前所有在线用户的列表。 ### HttpSessionBindingListener的作用 `HttpSessionBindingListener`接口提供两个回调方法:`valueBound()`和`valueUnbound()`。当...
- 在`result.jsp`中,我们获取`application`对象中的在线用户列表,并遍历它,将每个在线用户显示在表格中。 5. **注销流程**: - 用户点击注销链接,跳转到`logout.jsp`。 - 在`logout.jsp`中,我们从session...
- `public Vector getOnLineUser()`: 获取所有在线用户的列表。 - `public void valueBound(HttpSessionBindingEvent e)`: 当一个对象被绑定到会话时调用此方法。 - `public void valueUnbound...
- **getDateHeader(String name)**:获取指定请求头域的值,并将其转换为自 1970 年 1 月 1 日 GMT 以来的毫秒数。 - **getHeader(String name)**:获取指定请求头域的值。 - **getHeaderNames()**:获取所有请求...
这通常涉及到数据库查询以获取用户的会话ID,然后在服务器端进行操作。同时,可能还需要更新用户的状态信息,防止用户在被踢出后立即重新登录。 总结来说,这个压缩包提供的示例涵盖了Servlet技术中的事件监听器和...
在这个范例中,我们将深入探讨如何利用监听器来统计在线人员数量以及处理用户登录事件。 首先,我们需要了解Servlet监听器的基本概念。Servlet监听器是实现了特定接口的Java类,这些接口定义了针对不同Web应用程序...
通过实现这个接口,我们可以获取到用户的登录状态和相关信息,进而实现一些高级功能,如监控在线用户或执行特定操作。 要创建一个`HttpSessionAttributeListener`,首先我们需要定义一个类并实现其方法: ```java ...