`

JavaWeb中的Session、SessionListener、在线人数统计

 
阅读更多
JavaWeb中的Session、SessionListener、在线人数统计 JavaWeb中的Session
在JavaWeb中使用HttpSession(以下简称session)对象来表示一个会话。
正在装载数据……
Session的创建(代表会话周期的开始):第一次调用request.getSession()方法时,会创建一个session对象。
Session的销毁(代表会话周期的结束):在某个请求周期内调用了Session.invalidate()方法,此请求周期结束后,session被销毁;或者是session超时后自动销毁。
对于JSP,如果指定了,则在JSP中无法直接访问内置的session变量,同时也不会主动创建session,因为此时JSP未自动执行request.getSession()操作获取session。
在session对象刚创建的第一个请求周期内,调用session.isNew()方法将得到true。
可以在web.xml文件中配置session默认的超时时间(分钟):
<session-config>
    <session-timeout>10session-timeout>
session-config> 也可以调用session. setMaxInactiveInterval()方法设置session超时时间(分钟)
SessionListener

通过SessionListenr可以监听session的创建和销毁,步骤:
1.写一个类MySessionListener,实现javax.servlet.http.HttpSessionListener接口及其sessionCreated()、sessionDestroyed()方法
2.在web.xml中配置SessionListener:
<listener>
    <listener-class>MySessionListener类全名listener-class>
listener>
当 session被创建和销毁时,容器会分别调用SessionListener的sessionCreated()方法和 sessionDestroyed()方法,这两个方法中传入了一个参数对象HttpSessionEvent,可以通过此对象的 getSession()方法获取session对象。
应用:在线人数统计

import java.util.HashSet;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

public class MySessionListener implements HttpSessionListener {

       public void sessionCreated(HttpSessionEvent event) {
               HttpSession session = event.getSession();
               ServletContext application = session.getServletContext();
             
              // 在application范围由一个HashSet集保存所有的session
               HashSet sessions = (HashSet) application.getAttribute("sessions");
              if (sessions == null) {
                      sessions = new HashSet();
                      application.setAttribute("sessions", sessions);
               }
             
              // 新创建的session均添加到HashSet集中
               sessions.add(session);
              // 可以在别处从application范围中取出sessions集合              // 然后使用sessions.size()获取当前活动的session数,即为“在线人数”
        }

       public void sessionDestroyed(HttpSessionEvent event) {
               HttpSession session = event.getSession();
               ServletContext application = session.getServletContext();
               HashSet sessions = (HashSet) application.getAttribute("sessions");
             
              // 销毁的session均从HashSet集中移除
               sessions.remove(session);
        }
}


package stat;

import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpSessionAttributeListener; 
import javax.servlet.http.HttpSessionBindingEvent; 
import javax.servlet.http.HttpSessionBindingListener; 
import javax.servlet.http.HttpSessionEvent; 
import javax.servlet.http.HttpSessionListener; 

public class OnlineCounter extends HttpServlet implements HttpSessionListener, 
    HttpSessionAttributeListener,HttpSessionBindingListener { 
public OnlineCounter(){ 
    System.out.println("OnlineCounter initialized."); 

private static final long serialVersionUID = 1L; 

private static int sessionCounter = 0; 

private static int attributeCounter = 0; 

public void sessionCreated(HttpSessionEvent se) { 
    sessionCounter++; 
    System.out.println("session created:" + sessionCounter); 


public void sessionDestroyed(HttpSessionEvent se) { 
    sessionCounter--; 
    System.out.println("session destroied"); 


public void attributeAdded(HttpSessionBindingEvent se) { 
    attributeCounter++; 
    System.out.println("attribute added :" + attributeCounter); 


public void attributeRemoved(HttpSessionBindingEvent se) { 
    attributeCounter--; 
    System.out.println("attribute removed"); 


public void attributeReplaced(HttpSessionBindingEvent se) { 
    System.out.println(se.getName()+" replaced"); 

   
public void valueBound(HttpSessionBindingEvent event){ 
      System.out.println(event.getName()+"_Bound_"+event.getValue()); 


public void valueUnbound(HttpSessionBindingEvent event) { 
    System.out.println(event.getName()+"_Unbound_"+event.getValue()); 


public static int getOnlineSession() { 
    return sessionCounter; 

public static int getOnlineAttribute() { 
    return attributeCounter; 




统计在线人数..sessionCreated中添加ip判断

package com.asiainfo.sale.common;

import javax.servlet.http.*;
import javax.servlet.ServletException;
import java.io.IOException;
import java.util.Date;
import java.util.ArrayList;
import java.sql.Timestamp;
import javax.servlet.ServletRequestListener;
import javax.servlet.ServletRequestEvent;

public class SessionCounter implements HttpSessionListener,ServletRequestListener {
    private static final String CONTENT_TYPE = "text/html; charset=GBK";
    private static int activeSessions = 0;
    private HttpServletRequest request;
    private static ArrayList list = new ArrayList();

    public void init() throws ServletException {

    }

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType(CONTENT_TYPE);
        HttpSession session = request.getSession();
    }

    public void destroy() {
    }

    public void requestDestroyed(ServletRequestEvent event) {
        //To change body of implemented methods use File | Settings | File Templates.
    }

    public void requestInitialized(ServletRequestEvent sre){
        request=(HttpServletRequest)sre.getServletRequest();
    }


    public void sessionCreated(HttpSessionEvent httpSessionEvent) {
        String sessionId = httpSessionEvent.getSession().getId();
        Timestamp createTime = new Timestamp(System.currentTimeMillis());
        String loginIp = request.getRemoteAddr();
        boolean rs = true;
        if(list.size() > 0){
            for(int i = 0;i < list.size(); i ++){
                if(loginIp.equals(list.get(i))){
                    rs = false;
                }
            }
        }
        if(rs){                      //如果队列中存在相同的IP 则SESSION不增加
            list.add(loginIp);
            System.out.println("ipList队列新增ip: "+loginIp);
            activeSessions++;
            System.out.println("新增SESSION,sessionId = " + sessionId +"; createTime = " + createTime
                             + "; loginIp = " + loginIp +"; 当前总SESSION值为 "+activeSessions);
        }
    }

    public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
        String sessionId = httpSessionEvent.getSession().getId();
        Timestamp overTime = new Timestamp(System.currentTimeMillis());
        String loginIp = request.getRemoteAddr();
        if(activeSessions>0){
            if(list.size() > 0){
                for(int i = 0;i < list.size(); i ++){
                    if(loginIp.equals(list.get(i))){
                        list.remove(i); 
                        System.out.println("ipList队列移除ip: "+loginIp);
                    }
                }
            }
            activeSessions--;                   //在用户销毁的时候,从队列中踢出这个IP
            System.out.println("销毁SESSION,sessionId = " + sessionId +"; overTime = " + overTime
                             + "; loginIp = " + loginIp +"; 当前总SESSION值为 "+activeSessions);
        }
    }

    public static int getActiveSessions() {
        return activeSessions;
    }

    public void setActiveSessions(int i) {
        activeSessions = i;
    }

}
分享到:
评论

相关推荐

    JavaWeb 用session统计在线人数

    在JavaWeb开发中,"用session统计在线人数"是一个常见的需求,主要应用于网站或应用的实时用户活动监控。本文将详细解析如何利用session这一核心技术来实现这个功能。 首先,理解session的基本概念。在Web开发中,...

    javaweb开发在线人数统计

    当一个用户退出登录或者 Session 超时值发生时,从在线用户名单中删除这个用户,同时将在线的总人数减 1。这个功能的完成,主要是利用一个实现了 HttpSessionBindingListener 接口的对象,当这个对象被绑定到 ...

    Javaweb实现在线人数统计代码实例

    "Javaweb实现在线人数统计代码实例" 本资源主要介绍了Javaweb实现在线人数统计代码实例,通过示例代码详细介绍了在线人数统计的实现过程,对大家的学习或者工作具有一定的参考学习价值。下面是本资源的详细知识点...

    javaWeb_Session(实现用户一段时间自动登录)

    JavaWeb中的Session技术是Web开发中的重要概念,主要用于在服务器端保持用户状态,尤其是在用户登录后,实现用户在一段时间内的自动登录功能。本篇将详细解释Session的工作原理、配置及其实现用户自动登录的机制。 ...

    javaweb用session实现后台管理.rar

    javaweb用session实现后台管理.rarjavaweb用session实现后台管理.rarvjavaweb用session实现后台管理.rarvjavaweb用session实现后台管理.rarjavaweb用session实现后台管理.rarjavaweb用session实现后台管理.rar

    JavaWeb使用Session和Cookie实现登录认证

    JavaWeb 使用 Session 和 Cookie 实现登录认证 Session 和 Cookie 是 Web 开发中两种常用的技术,分别用于实现用户会话和客户端数据存储。本文将详细介绍如何使用 Session 和 Cookie 实现登录认证。 什么是 ...

    基于Session的在线购物车javaWeb开发

    一个基于Session的在线购物车,数据全部存储在Session中,验证码登录,无需数据库,简单易懂

    Javaweb项目session超时解决方案

    Javaweb项目Session超时解决方案 在Java Web开发中,Session机制为我们提供了许多方便,Session是由浏览器和服务器之间维护的。Session超时理解为:浏览器和服务器之间创建了一个Session,由于客户端长时间(休眠...

    JavaWeb中Session对象的学习笔记

    总结来说,JavaWeb中的Session对象是服务器用来在用户会话之间保持状态的重要工具。通过理解其工作原理和与Cookie的区别,开发者可以更好地选择合适的方法来管理用户会话,提升Web应用的用户体验。在实际开发中,...

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

    本文将详细介绍如何使用监听器来统计在线用户人数,包括实现的基本思路、具体代码实现以及相关类的结构。 首先,我们要明确监听器的种类,本案例中将使用HttpSessionListener来监听会话的创建和销毁事件,以及...

    java web在线人数统计/监听

    - **分布式环境:** 如果应用部署在分布式环境中,需要考虑Session复制或共享的问题,确保每个节点都能准确统计在线人数。 5. **示例代码** ```java import javax.servlet.http.HttpSessionEvent; import javax...

    JavaWeb基于Session实现的用户登陆注销方法示例

    JavaWeb中的Session是一种重要的会话跟踪机制,常用于在用户登录之后存储用户的认证信息,确保用户在多个页面间切换时能保持登录状态。本篇文章将详细介绍如何基于Session实现用户登录和注销功能,并对比Cookie和...

    JAVAWEB网站在线人数计数器

    这个Servlet负责处理请求,并可能更新服务器端的在线人数统计。 接下来是`OnlineCounterListener.java`,这是一个监听器类,实现了`ServletContextListener`和`HttpSessionListener`接口。这两个监听器在Servlet...

    Session-JavaWeb专题

    Session 是 Web 开发中非常重要的概念之一,尤其是在 JavaWeb 开发中。理解 Session 的工作原理及其在 Java 中的具体实现对于开发高效稳定的 Web 应用程序至关重要。通过本课程的学习,你不仅能够掌握 Session 的...

    _基于Javaweb内置对象session的仿真.pdf

    Session对象是JavaWeb开发中最重要的对象之一,它允许不同的用户基于Web服务器的会话方法,保持不同的用户状态,并基于Web服务器内存在整个用户会话过程中保持任何对象。Session机制采用的是在服务器端保持状态的...

    javaweb用户验证码登录session例子

    在Java Web开发中,用户登录验证是不可或缺的一部分,而在这个"javaweb用户验证码登录session例子"中,我们将深入探讨如何结合验证码、用户密码以及Session技术来实现安全的登录过程。Session是Web应用中用于跟踪...

    基于javaweb的电影院在线选座购票网站项目源码.zip

    基于javaweb的电影院在线选座购票网站项目源码.zip基于javaweb的电影院在线选座购票网站项目源码.zip基于javaweb的电影院在线选座购票网站项目源码.zip基于javaweb的电影院在线选座购票网站项目源码.zip基于javaweb...

    Java Webs实验:session购物车实验

    Java Webs实验:session购物车实验 1.按课程讲解实现购物车的三个页面,实现在三个页面切换,点击增加购物车,查看购物车,删除购物车功能 2.修改三个页面的内容,将逐个商品增加购物车和删除购物车改为多选增加删除...

    javaweb实训项目-基于JavaWeb的仿小米在线商城ShoppingMall源码.zip

    javaweb实训项目-基于JavaWeb的仿小米在线商城ShoppingMall源码.zip。基于JavaWeb的在线商城项目是我们专业大三上学期期末实训的项目。javaweb实训项目-基于JavaWeb的仿小米在线商城ShoppingMall源码.zip。基于...

Global site tag (gtag.js) - Google Analytics