通过session统计当前在线人数

<!-- 监听器配置 -->
	<listener>
		<listener-class>com.oracle.com.MyListener</listener-class>
	</listener>

  配置

package com.oracle.com;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

public class MyListener implements HttpSessionListener {

	@Override
	public void sessionCreated(HttpSessionEvent event) {
		// System.out.println("创建了");
		HttpSession session = event.getSession();// 获得Session对象
		// 通过Session获得servletcontext对象
		ServletContext servletContext = session.getServletContext();
		/**
		 * 1.获取num值
		 * 2.加1
		 * 3.存入servletcontext
		 */
		Object object = servletContext.getAttribute("num");
		if (object == null) {
			servletContext.setAttribute("num", 1);
		} else {
			Object num = servletContext.getAttribute("num");
			int num1 = (int) num;
			servletContext.setAttribute("num", num1 + 1);
		}
	}

	@Override
	public void sessionDestroyed(HttpSessionEvent event) {
		// System.out.println("销毁了");
		HttpSession session = event.getSession();// 获得Session对象
		// 通过Session获得servletcontext对象
		ServletContext servletContext = session.getServletContext();
		/**
		 *	1.获取num值
		 *  2.减1
		 *  3.存入servletcontext
		 */
		servletContext.setAttribute("num", (long) servletContext.getAttribute("num") - 1);
	}

}

  统计

package com.oracle.com;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class servletDemo5 extends HttpServlet {
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		doPost(req, resp);
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

		req.setCharacterEncoding("utf-8");
		resp.setContentType("text/html;charset=utf-8");
		HttpSession session = req.getSession();// 创建Session
		// session.setMaxInactiveInterval(10);//设置失效时间10秒 不是销毁
		PrintWriter writer = resp.getWriter();
		ServletContext servletContext = getServletContext();
		Object num = servletContext.getAttribute("num");
		writer.write("在线人数:" + num);
	}
}

  

时间: 2024-12-16 01:31:49

通过session统计当前在线人数的相关文章

ASP.NET中利用Application和Session统计在线人数、历史访问量

先来简单说一下ASP.NET中的Application和Session 下图是我们非常熟悉的Web应用程序的结构: 在这张图中,Web服务器中运行的Web应用程序就是我们所说的Application,每个客户端与Web服务器之间建立的连接就可以看做是一个Session.比如现在服务器端运行的是一个论坛系统,那么现在这个正运行在服务器端的论坛系统的软件就可以看做Application,而每个在线的用户与之建立的连接就相当于一个Session. 那么很容易就会理解,Application是共享的,相

session统计在线人数

/* * 当不涉及验证码的时候 */ //统计游客(未登录)人数 $map = array('session_expire'=>array('gt',NOW_TIME),'session_data'=>array('eq','')); $youke = D('Session')->where($map)->count(); dump($youke); //统计会员(已登录)人数 $map = array('session_expire'=>array('gt',NOW_TIM

【ASP.NET】——统计在线人数、历史访问人数

北大青鸟的视频中讲了很多很实用的例子,这是其中一个,在实现的过程中,遇到一些问题,但也都在老师的指导下和通过查阅资料解决了,感觉收获颇丰. 在做这个例子的时候发现:ASP.NET的Application和Session统计在线人数和历史访问人数时不准.明明已经关闭浏览器了,在线人数却没少,重新登录,历史人数也没增加.难道是我做错了,No.原因在这里. 首先,先简单说一下Application和Session. Application:应用程序类的对象.类比到这个程序,服务器端的统计人数程序就相当

监听器应用【统计网站人数、自定义session扫描器、踢人小案例】

从第一篇已经讲解过了监听器的基本概念,以及Servlet各种的监听器.这篇博文主要讲解的是监听器的应用. 统计网站在线人数 分析 我们在网站中一般使用Session来标识某用户是否登陆了,如果登陆了,就在Session域中保存相对应的属性.如果没有登陆,那么Session的属性就应该为空. 现在,我们想要统计的是网站的在线人数.我们应该这样做:我们监听是否有新的Session创建了,如果新创建了Sesssion,那么在线人数就应该+1.这个在线人数是整个站点的,所以应该有Context对象保存.

监听器实现案例----自定义session扫描器和统计在线用户人数及用户信息

一.案例一:自定义Session扫描器1.案例说明当一个Web应用创建的Session很多时,为了避免Session占用太多的内存,我们可以选择手动将这些内存中的session销毁,那么此时也可以借助监听器技术来实现.对于拿到 每个session 对象, 判断session的最后一次访问时间 与当前时间 的间隔是否超过 5 分钟, 如果超过就手动销毁 2.实现代码SessionScanner:session对象的监听器 MyTimerTask:定时器timer的任务对象 SessionScann

利用php比较精确的统计在线人数的办法

利用php比较精确的统计在线人数的办法,注意这里所说的精确是指个数,如果需要精确在时间上,则需要根据实际情况调整代码中的有效时间.(自己没有写,从别人那拿过来的,先放着然后再研究) <?php//author:www.scutephp.com$filename='online.txt';//数据文件$cookiename='VGOTCN_OnLineCount';//cookie名称$onlinetime=600;//在线有效时间,单位:秒 (即600等于10分钟) $online=file($

tomcat session思考

session的创建: 最近在做统计服务器在线人数时,通过统计当前服务器session数量来实现,实现一个HttpSessionListener,客户端第一次访问后台jsp或者servlet的时候都会调用sessionCreated()方法,也就是说tomcat自动创建session,(有时候我们需要在用户登录之后再去创建session,不需要tomcat来创建session,能力有限我目前没有找到可以手动控制何时创建session的方法).此时创建的session可以通过request.get

Web开发中的域问题:PageContext,Request,Session,ServletContext(Application)

Web开发中的四个域对象(范围由小到大): page(jsp有效)  request(一次请求) session(一次会话) application(当前web应用) page域指的是pageContext. request域指的是HttpServletRequest session 域指的是HTTPSession application 域指的是ServletContext 之所以他们是域对象,原因就是他们都内置了map集合,都有setAttribute getAttribute方法.而且他们

Servlet监听器

简介 监听器:专门用于对其他对象身上发生的事件或状态改变进行监听和相应处理的对象,当被监视的对象发生情况时,立即采取相应的行动. 监听器的分类: 1) 监听域对象自身的创建和销毁的事件监听器 2) 监听域对象中的属性的增加和删除的事件监听器 3) 监听绑定到 HttpSession 域中的某个对象的状态的事件监听器 如何编写监听器: 1) 编写实现了监听器接口的Java 类 public class HelloServletContextListner implements ServletCon