`

实现在线用户列表显示、注销的Listener

阅读更多

实现一个对在线用户的监听:即监听用户的登录和注销两个操作。需要自定义一个Listener,实现ServletContextListener,HttpSessionListener和HttpSessionAttributeListener。

一、表示层:

1、用户登录表单Login.jsp

Jsp代码 复制代码
  1. <%@ page language="java" contentType="text/html;charset=gb2312"%>   
  2. <html>   
  3. <head>   
  4.     <title>用户登录表单</title>   
  5. </head>   
  6. <body>   
  7.     <%--表单,提交方式为post-,提交到DoGetDemo--%>   
  8.     <form action="LoginConf.jsp" method="post">   
  9.         用户名:<input type="text" name="username"/><br>   
  10.         <input type="submit" value="登录"/>   
  11.         <input type="reset" value="重置"/>   
  12.     </form>   
  13. </body>   
  14. </html>  
<%@ page language="java" contentType="text/html;charset=gb2312"%>
<html>
<head>
	<title>用户登录表单</title>
</head>
<body>
	<%--表单,提交方式为post-,提交到DoGetDemo--%>
	<form action="LoginConf.jsp" method="post">
		用户名:<input type="text" name="username"/><br>
		<input type="submit" value="登录"/>
		<input type="reset" value="重置"/>
	</form>
</body>
</html>

 

2、用户登录处理页:LoginConf.jsp

Jsp代码 复制代码
  1. <%@ page language="java" contentType="text/html;charset=gb2312"%>   
  2. <html>   
  3. <head>   
  4.     <title>登录判断</title>   
  5. </head>   
  6. <body>   
  7. <center>   
  8.     <%   
  9.         String username = request.getParameter("username") ; //接受用户名参数   
  10.         //登录判断省略   
  11.         session.setAttribute("username",username);   
  12.     %>   
  13.     //跳转到用户列表页   
  14.     <jsp:forward page="ShowAllUser.jsp"></jsp:forward>   
  15. </center>   
  16. </body>   
  17. </html>  
<%@ page language="java" contentType="text/html;charset=gb2312"%>
<html>
<head>
	<title>登录判断</title>
</head>
<body>
<center>
	<%
		String username = request.getParameter("username") ; //接受用户名参数
		//登录判断省略
		session.setAttribute("username",username);
	%>
	//跳转到用户列表页
	<jsp:forward page="ShowAllUser.jsp"></jsp:forward>
</center>
</body>
</html>

3、用户列表显示页面:ShowAllUser.jsp

Jsp代码 复制代码
  1. <%@ page language="java" contentType="text/html;charset=gb2312"%>   
  2. <%@ page import="java.util.*"%>   
  3. <html>   
  4. <head>   
  5.     <title>在线用户列表</title>   
  6. </head>   
  7. <body>   
  8.     <%=session.getAttribute("username")%>   
  9.     欢迎你的登录,你可以<a href="Logout.jsp">注销</a>。   
  10.     <h3>在线用户列表</h3><hr>   
  11.     <%    
  12.         ArrayList<String> allUser = (ArrayList<String>)application.getAttribute("allUser");   
  13.         Iterator<String> iter = allUser.iterator();   
  14.         while(iter.hasNext()) {   
  15.             out.println("★" + iter.next() + "★&nbsp;&nbsp;&nbsp;");   
  16.         }   
  17.     %>   
  18. </body>   
  19. </html>  
<%@ page language="java" contentType="text/html;charset=gb2312"%>
<%@ page import="java.util.*"%>
<html>
<head>
	<title>在线用户列表</title>
</head>
<body>
	<%=session.getAttribute("username")%>
	欢迎你的登录,你可以<a href="Logout.jsp">注销</a>。
	<h3>在线用户列表</h3><hr>
	<% 
		ArrayList<String> allUser = (ArrayList<String>)application.getAttribute("allUser");
		Iterator<String> iter = allUser.iterator();
		while(iter.hasNext()) {
			out.println("★" + iter.next() + "★&nbsp;&nbsp;&nbsp;");
		}
	%>
</body>
</html>

 

 

4、用户注销页面Logout.jsp

 

Jsp代码 复制代码
  1. <%@ page language="java" contentType="text/html;charset=gb2312"%>   
  2. <html>   
  3. <head>   
  4.     <title>注销</title>   
  5. </head>   
  6. <body>   
  7.     <%   
  8.         //注销时进行session销毁   
  9.         session.invalidate() ;   
  10.     %>   
  11. </body>   
  12. </html>  
<%@ page language="java" contentType="text/html;charset=gb2312"%>
<html>
<head>
	<title>注销</title>
</head>
<body>
	<%
		//注销时进行session销毁
		session.invalidate() ;
	%>
</body>
</html>

 

 

二、自定义Listener:OnlineUserListener

 

Java代码 复制代码
  1. package listener;   
  2.   
  3. import java.util.ArrayList;   
  4.   
  5. import javax.servlet.ServletContext;   
  6. import javax.servlet.ServletContextEvent;   
  7. import javax.servlet.ServletContextListener;   
  8. import javax.servlet.http.HttpSessionAttributeListener;   
  9. import javax.servlet.http.HttpSessionBindingEvent;   
  10. import javax.servlet.http.HttpSessionEvent;   
  11. import javax.servlet.http.HttpSessionListener;   
  12.   
  13. public class OnlineUserListener implements  
  14.         ServletContextListener,HttpSessionListener,HttpSessionAttributeListener{   
  15.     // 声明一个ServletContext对象   
  16.     private ServletContext application = null ;   
  17.     //ServletContext创建时调用该方法   
  18.     public void contextInitialized(ServletContextEvent sce) {   
  19.         //储存所用用户名   
  20.         ArrayList<String> allUser = new ArrayList<String>();   
  21.         //获得当前application对象   
  22.         application = sce.getServletContext();   
  23.         //设置到application范围   
  24.         application.setAttribute("allUser", allUser);   
  25.     }   
  26.     //ServletContext销毁时调用该方法   
  27.     public void contextDestroyed(ServletContextEvent sce) {   
  28.            
  29.     }   
  30.     //session创建时调用该方法   
  31.     public void sessionCreated(HttpSessionEvent se) {   
  32.            
  33.     }   
  34.     //session销毁时调用该方法   
  35.     public void sessionDestroyed(HttpSessionEvent se) {   
  36.         //获得当前所有的用户   
  37.         ArrayList<String> allUser = (ArrayList<String>) application.getAttribute("allUser");   
  38.         //获得删除的用户   
  39.         String user = (String)se.getSession().getAttribute("username");   
  40.         //删除该用户   
  41.         allUser.remove(user);   
  42.         //重新设置到application范围中   
  43.         application.setAttribute("allUser", allUser);   
  44.     }   
  45.     //session范围属性添加时调用   
  46.     public void attributeAdded(HttpSessionBindingEvent se) {   
  47.         //获得当前所有的用户   
  48.         ArrayList<String> allUser = (ArrayList<String>) application.getAttribute("allUser");   
  49.         //获得添加的用户   
  50.         String user = (String) se.getValue();   
  51.         //添加到所有用户中   
  52.         allUser.add(user);   
  53.     }   
  54.     //session范围属性移除时调用   
  55.     public void attributeRemoved(HttpSessionBindingEvent se) {   
  56.     }   
  57.     //session范围属性替换时调用   
  58.     public void attributeReplaced(HttpSessionBindingEvent se) {   
  59.     }   
  60.   
  61.   
  62. }  
package listener;

import java.util.ArrayList;

import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

public class OnlineUserListener implements
		ServletContextListener,HttpSessionListener,HttpSessionAttributeListener{
	// 声明一个ServletContext对象
	private ServletContext application = null ;
	//ServletContext创建时调用该方法
	public void contextInitialized(ServletContextEvent sce) {
		//储存所用用户名
		ArrayList<String> allUser = new ArrayList<String>();
		//获得当前application对象
		application = sce.getServletContext();
		//设置到application范围
		application.setAttribute("allUser", allUser);
	}
	//ServletContext销毁时调用该方法
	public void contextDestroyed(ServletContextEvent sce) {
		
	}
	//session创建时调用该方法
	public void sessionCreated(HttpSessionEvent se) {
		
	}
	//session销毁时调用该方法
	public void sessionDestroyed(HttpSessionEvent se) {
		//获得当前所有的用户
		ArrayList<String> allUser = (ArrayList<String>) application.getAttribute("allUser");
		//获得删除的用户
		String user = (String)se.getSession().getAttribute("username");
		//删除该用户
		allUser.remove(user);
		//重新设置到application范围中
		application.setAttribute("allUser", allUser);
	}
	//session范围属性添加时调用
	public void attributeAdded(HttpSessionBindingEvent se) {
		//获得当前所有的用户
		ArrayList<String> allUser = (ArrayList<String>) application.getAttribute("allUser");
		//获得添加的用户
		String user = (String) se.getValue();
		//添加到所有用户中
		allUser.add(user);
	}
	//session范围属性移除时调用
	public void attributeRemoved(HttpSessionBindingEvent se) {
	}
	//session范围属性替换时调用
	public void attributeReplaced(HttpSessionBindingEvent se) {
	}


}

 

三、Listener配置

Xml代码 复制代码
  1. <listener>  
  2.  <listener-class>listener.OnlineUserListener</listener-class>  
  3. </listener>  
<listener>
 <listener-class>listener.OnlineUserListener</listener-class>
</listener>

 

分享到:
评论

相关推荐

    Listener单点登录与显示在线用户

    在本场景中,“Listener单点登录与显示在线用户”涉及到的技术点主要是网络应用中的身份验证、会话管理和实时用户状态监控。 单点登录(Single Sign-On, SSO)是一种允许用户通过一次认证过程访问多个应用系统的...

    监听器显示登陆用户列表,并实现踢人功能

    在本主题中,我们将深入探讨如何利用`HttpSessionAttributeListener`来实现显示登录用户列表以及踢人功能。 `HttpSessionAttributeListener`是Servlet规范定义的一种监听器接口,它允许我们监听HTTP会话中的属性...

    基于MVC的用户注册登录注销实例.zip

    Java可以通过JDBC(Java Database Connectivity)接口连接到数据库,执行SQL语句,实现用户的添加、查询、更新和删除。在用户注册时,需要将新用户信息插入到用户表中;登录时,从数据库中查询匹配的用户;注销则...

    HttpSessionBindingListener实现在线人员查看即人数统计

    如果一段时间内没有收到心跳请求,可以认为用户已离线并从在线列表中移除。 通过上述方式,`HttpSessionBindingListener`可以帮助我们实现对在线用户的精确监控和统计。同时,它还能用于其他场景,比如缓存管理、...

    记录同时在线人数 jsp

    在开发Java Web应用程序时,有时我们需要统计同时在线的用户人数,以便分析网站的活跃度或者进行资源优化。本文将深入探讨如何使用JSP(JavaServer Pages)和Servlet结合Java的session技术来实现这一功能。 首先,...

    JSP中基于Session的在线用户统计分析

    在JSP中获取当前所有在线用户列表时,Servlet API并未提供直接获取Session列表的方法。此时,可以利用Servlet监听器(Listener)来实现这一功能。在Servlet 2.2中,我们可以使用`HttpSessionBindingListener`接口,...

    JSP中的在线人数统计

    在Web开发中,统计在线人数是一种常见的需求,尤其是在社交网络、论坛或者任何需要实时显示在线用户数量的应用场景中尤为重要。本文将详细介绍如何在JSP(JavaServer Pages)环境中实现在线人数统计的功能。此功能...

    java web用servlet监听器实现显示在线人数

    通过结合监听器和servlet,我们可以在Java Web应用中实现用户会话的实时跟踪和在线人数的统计显示。这对于网站运营者来说是一个非常有用的功能,可以帮助了解网站的实时访问情况,并为用户规模的分析提供数据支持。

    SessionManager:Java监听器实现在线人数统计Demo

    总结起来,"SessionManager:Java监听器实现在线人数统计Demo"是一个基于Java Servlet技术的实例,它利用HttpSessionListener监听器来跟踪用户会话的创建和销毁,进而统计在线用户数量。这个过程涉及了Servlet API、...

    android 显示网络图片

    在Android开发中,显示网络图片是一项常见的任务,无论是制作应用的界面还是构建用户交互的界面,都需要用到这个功能。本篇文章将详细讲解如何在Android应用程序中加载并显示网络上的图片,以实现“android 显示网络...

    ex.zip_JSP在线人数统计_ex

    在Java Servlet规范中,监听器是实现了特定接口的Java类,它们会在特定的事件发生时被调用,例如用户的登录、注销或者页面的访问。在这个项目中,我们需要创建一个`HttpSessionListener`,这个监听器会在用户的会话...

    demo-imlib-android-v2,rong imlib sdk 2.0演示。.zip

    融云提供了一套完整的消息推送服务,配合SDK使用,可以实现在用户未打开应用时,通过系统通知提醒用户有新消息。 总结,"demo-imlib-android-v2,rong imlib sdk 2.0演示。.zip"中的示例项目详尽展示了融云IMLib SDK...

    JSP Spring防止用户重复登录的实现方法

    此外,可以考虑实现会话超时功能,确保即使用户忘记注销,一段时间无操作后也会自动登出。 总之,防止用户重复登录是提高Web应用安全性的关键措施之一。通过结合Spring Security提供的工具和策略,我们可以有效地...

    Java Servlet+jsp在线考试系统.zip

    4. **监听器(Listener)**:监控特定事件,如用户登录、注销,实现会话管理或统计功能。 5. **JSON/RESTful API**:可能用于与前端或其他系统交换数据,提供更灵活的交互方式。 综上所述,Java Servlet+jsp在线...

    javaee试验二Servlet程序设计.pdf

    实验中,监听器将用于统计网页访问次数,实时更新在线用户数,并维护在线用户列表,提供了动态网站管理的能力。 4. **验证码生成**: 验证码是为了防止自动化的机器人或恶意用户而设置的,实验要求在登录页面生成...

    uberfire-webapp-0.4.2.Beta1.zip

    例如,我们可以监听用户的登录、注销事件,或者监控数据的实时更新,从而动态调整界面显示或执行相应的业务逻辑。 在压缩包"penfold-listener-master"中,包含了Penfold监听器项目的源代码和相关文档。开发者可以...

    android 边下边播放mp3完美实现(有缓冲和播放进度效果)

    在Android平台上,实现边下边播MP3的功能是一项常见的需求,尤其对于在线音乐服务或流媒体应用来说。本文将深入探讨如何在Android中构建这样一个功能,包括MP3的缓冲、播放进度显示及其优化策略。 首先,我们需要...

    游戏论坛网站

    在论坛系统中,可以使用EJB来实现用户认证、权限管理等功能。 4. **JSF(JavaServer Faces)**:JSF是一种用于构建用户界面的MVC(Model-View-Controller)框架。虽然在现代Web开发中,常常被Angular、React等前端...

    JavaEE在线人数管理系统

    这个系统提供了几个关键功能,包括显示当前在线人数、详细展示在线用户的个人信息,以及赋予管理员权限来踢除特定用户。这些功能的实现涉及到了JavaEE中的核心组件,如Filter、Listener和Servlet。 首先,Filter...

Global site tag (gtag.js) - Google Analytics