`
wanchong998
  • 浏览: 235574 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

session 监听器 实现一次登陆 统计在线人数

    博客分类:
  • J2EE
阅读更多
//新建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监听器统计在线人数的实现代码

    在Spring boot中通过HttpSessionListener监听器统计在线人数是一种常见的技术实现方式,适用于需要跟踪和管理用户会话状态的Web应用程序。以下是从给定文件中提炼的关键知识点。 首先,了解HttpSessionListener接口...

    监听器实现在线人数统计

    在Java Web开发中,我们可以使用Servlet API中的Session监听器来实现这一功能。Session监听器是实现了`javax.servlet.http.HttpSessionListener`接口的类,它可以监听到Session的创建和销毁事件,从而判断用户的登录...

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

    1. **创建监听器类**:创建一个实现了`HttpSessionBindingListener`接口的类。在这个类中,你需要重写上述两个方法来记录用户在线状态。 2. **用户登录**:当用户成功登录时,将用户信息(如用户名或用户ID)作为一...

    Java监听器学习 统计当前在线人数

    - 实现一个`Socket`监听器,每当`accept()`返回一个新的`Socket`对象时,增加在线人数计数。 2. **处理会话状态**: - 在服务器端,每个连接可以被视为一个会话。为了准确统计在线人数,我们需要管理这些会话的...

    springboot 用监听器统计在线人数案例分析

    本文通过对Spring Boot用监听器统计在线人数案例的分析,详细介绍了实现该功能的步骤和注意事项。 首先,要实现该功能,我们需要创建一个实现了HttpSessionListener接口的监听器类。在Spring Boot中,可以通过在...

    day18 监听器 统计在线人数,定时销毁超时session,钝化活化session,在线列表显示和踢人功能防止用户自动登录,在线支付

    在本主题“day18 监听器”中,我们将探讨如何利用监听器来统计在线人数、定时销毁超时session、实现session的钝化与活化,以及如何在系统中显示在线用户列表和实现踢人功能,从而防止用户自动登录。同时,还会涉及...

    session初始化+网站流量统计+在线人数

    Session的初始化通常在用户第一次与服务器交互时发生,可以通过监听器(Listener)来实现。例如,创建一个实现了HttpSessionListener接口的类,重写sessionCreated()方法,当新的session被创建时,这个方法会被调用...

    Javaweb监听器实例之统计在线人数

    通过以上步骤,我们可以实现一个完整的统计在线用户人数的监听器实例。这个实例对于Web应用来说非常实用,尤其是在需要对网站的用户活跃度和在线情况进行监控的场合。 需要注意的是,文中提到的代码片段可能存在...

    jsp中监听器实现在线用户统计

    在"jsp中监听器实现在线用户统计"这个场景下,我们需要关注的是如何利用监听器来跟踪和管理在线用户。 首先,我们要理解Servlet监听器的概念。Servlet监听器是实现了Java Servlet API中特定接口的Java类,这些接口...

    java监听器学习 统计在线人数

    在Java Web开发中,监听器(Listeners)是用于监听特定事件的重要组件,它们可以扩展应用程序的功能,无需修改现有...在本案例中,我们利用这些监听器来统计并实时更新在线人数,为用户提供了一个直观的在线状态展示。

    java web在线人数统计/监听

    - **实时显示:** 为了让用户看到实时的在线人数,可以创建一个Servlet或JSP页面,从监听器中获取并显示当前的在线人数。 4. **优化与注意事项** - **并发问题:** 当大量用户同时进行登录或登出操作时,需要注意...

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

    本示例"SessionManager:Java监听器实现在线人数统计Demo"将演示如何利用Java的Servlet监听器来实现这一功能。以下是详细的步骤和相关知识点。 首先,我们需要了解Java Servlet监听器的概念。Servlet监听器是Java ...

    JSP 在线人数统计的实现

    - **创建Session监听器**:首先,我们需要创建一个实现了`javax.servlet.http.HttpSessionListener`接口的Java类。在这个类的`sessionCreated()`方法中,每当新的Session被创建,就表示有新用户登录,因此增加在线...

    java统计在线人数

    为了每分钟统计一次在线人数,你可以使用`java.util.Timer`或`ScheduledExecutorService`来定期执行任务。在这个任务中,你可以遍历所有的`HttpSession`,统计有效的会话数量。此外,为了防止数据丢失,可以将统计...

    .net C# 通过session控制重复登录及在线用户统计

    在.NET C#开发中,`Session`是一种常用的技术,用于在服务器端存储用户特定的数据,以便在用户与网站交互期间保持状态。...通过合理设计和实现,我们可以创建一个既能有效控制用户登录,又能准确统计在线人数的系统。

    java web 统计在线人数

    在Java Web开发中,统计在线人数是一项常见的需求,它能够帮助我们了解网站或应用的实时活跃用户数量。这里我们将深入探讨如何实现这一功能。 首先,我们需要理解“在线人数”的定义。通常,它指的是在一定时间窗口...

    JAVA jsp统计在线人数

    在Java JSP(JavaServer Pages)环境中,统计在线人数是一项常见的需求,这通常涉及到服务器端的会话管理、数据持久化以及实时性处理。这里我们将深入探讨如何利用JSP技术来实现这一功能。 首先,我们需要理解JSP的...

    留言本--用DAO模式设计,servlet,监听器统计在线人数

    【标题】"留言本--用DAO模式设计,servlet,监听器统计在线人数"涉及到的是在Java Web开发中实现一个用户交互系统的核心技术。在这个项目中,DAO(Data Access Object)模式、Servlet以及监听器(Listener)是三个...

    JAVA的SESSION精准统计

    这就需要我们在Session监听器中实现逻辑,当Session失效时触发事件并更新计数。 3. **分布式环境**:在分布式系统中,多个服务器可能共享同一个Session存储(例如使用Redis或Memcached)。在这种情况下,Session...

Global site tag (gtag.js) - Google Analytics