//新建servlet 作为监听操作
package com.wanchong.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());
}
}
//新建login.jsp
<%@ page contentType="text/html;charset=gb2312" %>
<html>
<head>
<title>测试HttpSessionBindingListener接口</title>
</head>
<body>
<form name="login" method="post" action="onLineUser.jsp">
<input type=text name="username">
<input type=submit name="submit" value="登陆">
</form>
</body>
</html>
//新建logout.jsp
<%@ page contentType="text/html;charset=gb2312" %>
<%@ page import="com.wanchong.servlet.OnLineUser,java.util.*" %>
<jsp:useBean id="onlineuser" class="com.wanchong.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>
//onLineUser.jsp
<%@ page contentType="text/html;charset=gb2312" %>
<%@page import="java.util.*,com.wanchong.servlet.*"%>
<jsp:useBean id="onlineuser" class="com.wanchong.servlet.OnLineUser" scope="application" />
<html>
<head>
<title>搞定JSP在线人数</title>
</head>
<body onunload="loginout();">
<center>
<h1>登陆成功,欢迎您访问!</h1>
</center>
<% session = request.getSession(false); %>
<%
String username=request.getParameter("username");
if (onlineuser.existUser(username)){
out.println("用户<font color=red>"+username+"</font>已经登陆!");
}else{
session.setMaxInactiveInterval(60);//Sesion有效时长,以秒为单位
session.setAttribute(username,onlineuser);
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>
<script type="text/javascript">
function loginout(){
alert("非法退出!!");
window.location="./logout.jsp?username=<%=username%>";
}
</script>
</body>
</html>
基本能实现一次登陆的问题,解决在线人数...............
分享到:
相关推荐
在Spring boot中通过HttpSessionListener监听器统计在线人数是一种常见的技术实现方式,适用于需要跟踪和管理用户会话状态的Web应用程序。以下是从给定文件中提炼的关键知识点。 首先,了解HttpSessionListener接口...
在Java Web开发中,我们可以使用Servlet API中的Session监听器来实现这一功能。Session监听器是实现了`javax.servlet.http.HttpSessionListener`接口的类,它可以监听到Session的创建和销毁事件,从而判断用户的登录...
1. **创建监听器类**:创建一个实现了`HttpSessionBindingListener`接口的类。在这个类中,你需要重写上述两个方法来记录用户在线状态。 2. **用户登录**:当用户成功登录时,将用户信息(如用户名或用户ID)作为一...
- 实现一个`Socket`监听器,每当`accept()`返回一个新的`Socket`对象时,增加在线人数计数。 2. **处理会话状态**: - 在服务器端,每个连接可以被视为一个会话。为了准确统计在线人数,我们需要管理这些会话的...
本文通过对Spring Boot用监听器统计在线人数案例的分析,详细介绍了实现该功能的步骤和注意事项。 首先,要实现该功能,我们需要创建一个实现了HttpSessionListener接口的监听器类。在Spring Boot中,可以通过在...
在本主题“day18 监听器”中,我们将探讨如何利用监听器来统计在线人数、定时销毁超时session、实现session的钝化与活化,以及如何在系统中显示在线用户列表和实现踢人功能,从而防止用户自动登录。同时,还会涉及...
Session的初始化通常在用户第一次与服务器交互时发生,可以通过监听器(Listener)来实现。例如,创建一个实现了HttpSessionListener接口的类,重写sessionCreated()方法,当新的session被创建时,这个方法会被调用...
通过以上步骤,我们可以实现一个完整的统计在线用户人数的监听器实例。这个实例对于Web应用来说非常实用,尤其是在需要对网站的用户活跃度和在线情况进行监控的场合。 需要注意的是,文中提到的代码片段可能存在...
在"jsp中监听器实现在线用户统计"这个场景下,我们需要关注的是如何利用监听器来跟踪和管理在线用户。 首先,我们要理解Servlet监听器的概念。Servlet监听器是实现了Java Servlet API中特定接口的Java类,这些接口...
在Java Web开发中,监听器(Listeners)是用于监听特定事件的重要组件,它们可以扩展应用程序的功能,无需修改现有...在本案例中,我们利用这些监听器来统计并实时更新在线人数,为用户提供了一个直观的在线状态展示。
- **实时显示:** 为了让用户看到实时的在线人数,可以创建一个Servlet或JSP页面,从监听器中获取并显示当前的在线人数。 4. **优化与注意事项** - **并发问题:** 当大量用户同时进行登录或登出操作时,需要注意...
本示例"SessionManager:Java监听器实现在线人数统计Demo"将演示如何利用Java的Servlet监听器来实现这一功能。以下是详细的步骤和相关知识点。 首先,我们需要了解Java Servlet监听器的概念。Servlet监听器是Java ...
- **创建Session监听器**:首先,我们需要创建一个实现了`javax.servlet.http.HttpSessionListener`接口的Java类。在这个类的`sessionCreated()`方法中,每当新的Session被创建,就表示有新用户登录,因此增加在线...
为了每分钟统计一次在线人数,你可以使用`java.util.Timer`或`ScheduledExecutorService`来定期执行任务。在这个任务中,你可以遍历所有的`HttpSession`,统计有效的会话数量。此外,为了防止数据丢失,可以将统计...
在.NET C#开发中,`Session`是一种常用的技术,用于在服务器端存储用户特定的数据,以便在用户与网站交互期间保持状态。...通过合理设计和实现,我们可以创建一个既能有效控制用户登录,又能准确统计在线人数的系统。
在Java Web开发中,统计在线人数是一项常见的需求,它能够帮助我们了解网站或应用的实时活跃用户数量。这里我们将深入探讨如何实现这一功能。 首先,我们需要理解“在线人数”的定义。通常,它指的是在一定时间窗口...
在Java JSP(JavaServer Pages)环境中,统计在线人数是一项常见的需求,这通常涉及到服务器端的会话管理、数据持久化以及实时性处理。这里我们将深入探讨如何利用JSP技术来实现这一功能。 首先,我们需要理解JSP的...
【标题】"留言本--用DAO模式设计,servlet,监听器统计在线人数"涉及到的是在Java Web开发中实现一个用户交互系统的核心技术。在这个项目中,DAO(Data Access Object)模式、Servlet以及监听器(Listener)是三个...
这就需要我们在Session监听器中实现逻辑,当Session失效时触发事件并更新计数。 3. **分布式环境**:在分布式系统中,多个服务器可能共享同一个Session存储(例如使用Redis或Memcached)。在这种情况下,Session...