实现一个对在线用户的监听:即监听用户的登录和注销两个操作。需要自定义一个Listener,实现ServletContextListener,HttpSessionListener和HttpSessionAttributeListener。
一、表示层:
1、用户登录表单Login.jsp
- <%@ 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>
<%@ 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
- <%@ 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>
<%@ 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
- <%@ 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() + "★ ");
- }
- %>
- </body>
- </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() + "★ ");
}
%>
</body>
</html>
4、用户注销页面Logout.jsp
- <%@ page language="java" contentType="text/html;charset=gb2312"%>
- <html>
- <head>
- <title>注销</title>
- </head>
- <body>
- <%
- //注销时进行session销毁
- session.invalidate() ;
- %>
- </body>
- </html>
<%@ page language="java" contentType="text/html;charset=gb2312"%>
<html>
<head>
<title>注销</title>
</head>
<body>
<%
//注销时进行session销毁
session.invalidate() ;
%>
</body>
</html>
二、自定义Listener:OnlineUserListener
- 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{
-
-
private ServletContext application = null ;
-
-
public void contextInitialized(ServletContextEvent sce) {
-
-
ArrayList<String> allUser = new ArrayList<String>();
-
- application = sce.getServletContext();
-
-
application.setAttribute("allUser", allUser);
- }
-
-
public void contextDestroyed(ServletContextEvent sce) {
-
- }
-
-
public void sessionCreated(HttpSessionEvent se) {
-
- }
-
-
public void sessionDestroyed(HttpSessionEvent se) {
-
-
ArrayList<String> allUser = (ArrayList<String>) application.getAttribute("allUser");
-
-
String user = (String)se.getSession().getAttribute("username");
-
- allUser.remove(user);
-
-
application.setAttribute("allUser", allUser);
- }
-
-
public void attributeAdded(HttpSessionBindingEvent se) {
-
-
ArrayList<String> allUser = (ArrayList<String>) application.getAttribute("allUser");
-
- String user = (String) se.getValue();
-
- allUser.add(user);
- }
-
-
public void attributeRemoved(HttpSessionBindingEvent se) {
- }
-
-
public void attributeReplaced(HttpSessionBindingEvent se) {
- }
-
-
- }
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配置
- <listener>
-
<listener-class>listener.OnlineUserListener</listener-class>
-
</listener>
<listener>
<listener-class>listener.OnlineUserListener</listener-class>
</listener>
分享到:
相关推荐
在本场景中,“Listener单点登录与显示在线用户”涉及到的技术点主要是网络应用中的身份验证、会话管理和实时用户状态监控。 单点登录(Single Sign-On, SSO)是一种允许用户通过一次认证过程访问多个应用系统的...
在本主题中,我们将深入探讨如何利用`HttpSessionAttributeListener`来实现显示登录用户列表以及踢人功能。 `HttpSessionAttributeListener`是Servlet规范定义的一种监听器接口,它允许我们监听HTTP会话中的属性...
Java可以通过JDBC(Java Database Connectivity)接口连接到数据库,执行SQL语句,实现用户的添加、查询、更新和删除。在用户注册时,需要将新用户信息插入到用户表中;登录时,从数据库中查询匹配的用户;注销则...
如果一段时间内没有收到心跳请求,可以认为用户已离线并从在线列表中移除。 通过上述方式,`HttpSessionBindingListener`可以帮助我们实现对在线用户的精确监控和统计。同时,它还能用于其他场景,比如缓存管理、...
在开发Java Web应用程序时,有时我们需要统计同时在线的用户人数,以便分析网站的活跃度或者进行资源优化。本文将深入探讨如何使用JSP(JavaServer Pages)和Servlet结合Java的session技术来实现这一功能。 首先,...
在JSP中获取当前所有在线用户列表时,Servlet API并未提供直接获取Session列表的方法。此时,可以利用Servlet监听器(Listener)来实现这一功能。在Servlet 2.2中,我们可以使用`HttpSessionBindingListener`接口,...
在Web开发中,统计在线人数是一种常见的需求,尤其是在社交网络、论坛或者任何需要实时显示在线用户数量的应用场景中尤为重要。本文将详细介绍如何在JSP(JavaServer Pages)环境中实现在线人数统计的功能。此功能...
通过结合监听器和servlet,我们可以在Java Web应用中实现用户会话的实时跟踪和在线人数的统计显示。这对于网站运营者来说是一个非常有用的功能,可以帮助了解网站的实时访问情况,并为用户规模的分析提供数据支持。
总结起来,"SessionManager:Java监听器实现在线人数统计Demo"是一个基于Java Servlet技术的实例,它利用HttpSessionListener监听器来跟踪用户会话的创建和销毁,进而统计在线用户数量。这个过程涉及了Servlet API、...
在Android开发中,显示网络图片是一项常见的任务,无论是制作应用的界面还是构建用户交互的界面,都需要用到这个功能。本篇文章将详细讲解如何在Android应用程序中加载并显示网络上的图片,以实现“android 显示网络...
在Java Servlet规范中,监听器是实现了特定接口的Java类,它们会在特定的事件发生时被调用,例如用户的登录、注销或者页面的访问。在这个项目中,我们需要创建一个`HttpSessionListener`,这个监听器会在用户的会话...
融云提供了一套完整的消息推送服务,配合SDK使用,可以实现在用户未打开应用时,通过系统通知提醒用户有新消息。 总结,"demo-imlib-android-v2,rong imlib sdk 2.0演示。.zip"中的示例项目详尽展示了融云IMLib SDK...
此外,可以考虑实现会话超时功能,确保即使用户忘记注销,一段时间无操作后也会自动登出。 总之,防止用户重复登录是提高Web应用安全性的关键措施之一。通过结合Spring Security提供的工具和策略,我们可以有效地...
4. **监听器(Listener)**:监控特定事件,如用户登录、注销,实现会话管理或统计功能。 5. **JSON/RESTful API**:可能用于与前端或其他系统交换数据,提供更灵活的交互方式。 综上所述,Java Servlet+jsp在线...
实验中,监听器将用于统计网页访问次数,实时更新在线用户数,并维护在线用户列表,提供了动态网站管理的能力。 4. **验证码生成**: 验证码是为了防止自动化的机器人或恶意用户而设置的,实验要求在登录页面生成...
例如,我们可以监听用户的登录、注销事件,或者监控数据的实时更新,从而动态调整界面显示或执行相应的业务逻辑。 在压缩包"penfold-listener-master"中,包含了Penfold监听器项目的源代码和相关文档。开发者可以...
在Android平台上,实现边下边播MP3的功能是一项常见的需求,尤其对于在线音乐服务或流媒体应用来说。本文将深入探讨如何在Android中构建这样一个功能,包括MP3的缓冲、播放进度显示及其优化策略。 首先,我们需要...
在论坛系统中,可以使用EJB来实现用户认证、权限管理等功能。 4. **JSF(JavaServer Faces)**:JSF是一种用于构建用户界面的MVC(Model-View-Controller)框架。虽然在现代Web开发中,常常被Angular、React等前端...
这个系统提供了几个关键功能,包括显示当前在线人数、详细展示在线用户的个人信息,以及赋予管理员权限来踢除特定用户。这些功能的实现涉及到了JavaEE中的核心组件,如Filter、Listener和Servlet。 首先,Filter...