小感悟&网站在线用户统计的简单实现

最近突然发现了很多有趣的事,比如:当你懂的东西越多的时候,你就会明白你不懂的东西也越多。这句话听起来很诡异,但是你仔细想想是不是这个道理。

早上在床上突然萌生了一个想法: 我能不能每天坚持写一篇原创推文?要是原创就必须保持每天有输出,而且字数得300字以上(毕竟低于300字无法进行原创认证),要想每天都保持一定的输出量,那就必须保证每天都有一定的输入才行,水池放水的小学数学问题我们都懂。所有试试吧,不行就一周至少5篇,(看,我有暴露出懒惰的特性咯,哎 ! 惭愧!!)

好,接下来说说网站在线用户的统计的简单的实现!

为什么麽我想实现这个功能呢,其实还是我的虚荣心在搞鬼,想想当自己的小网站上线后,自己可以在后台看到当前在线的用户有哪些,总共有哪些用户访问过我的网站,他们都浏览了我的哪些网页,每每想到这我就无比的激动,以至于我都忘了一个真相:除了你自己还有谁会访问你的网站呢?好吧,虽然是真的,但是不管了,想完成再说!!

首先,假设数据库中有以下几张表:

users表,字段:id,用户名,密码

vistors表,字段: id,用户id,到访时间,离开时间,ip地址,来着页面

history表,字段:id,用户id,访问的页面,访问的时间

在说具体操作之前想先讲一下监听器,listener,在java web中listener的作用是对web服务器如tomcat上发生的事件进行处理。

在java web服务器中一般般listener分为三大类:

Servlet context events (其中Servlet context 就是 jsp中的application这个内置对象)这个监听器主要监听的的是application的两个事件:一个是lifecycle,生命周期,作用是监听web服务器的启动和关闭,另一个是changes to attributes 作用是监听application的属性的变化。

HTTP session events 这个监听器主要监听的是session的,session会话的创建和销毁,session属性的改变。

Servlet request events 这个监听器主要是监听request的,一个请求的发起和请求的接收,request的属性的改变。

好,利用上面的三个监听器就可以完成需求咯。

用户通过浏览器访问网站,服务器就会创建一个session,同时会触发listener中的sessionCreated()方法,因此,在该方法中需要做的事就是,将该访客的部分信息存放到数据库中,并使用HashMap数据结构把用户的信息存在到application的一个属性中,其中HashMap的key是session的id,value是一个Vistor实例,

然后需要显示在线用户时,直接从application中获取即可,需要显示历史访客是,从数据库的Vistors表中获取,

用户访问每一个网页都好触发requestInitialized()方法,需要在该放在中班用户的信息,访问的该网页时间,保存到history表中

当用户离开时会触发sessionDestroyed()方法,需要做的事情是,把该用户从在线用户表(application的一个属性)中删除,然后在访客表中为该用户设置离开时间,

用户的登陆后需要把用户的id与访客关联起来,

用户重复,多处登陆问题的处理,肯能出现一个用户名在多处登陆,解决办法是,在用户登陆是先在在线用户表中查找该用户,如果找到说明已经登录,现在限制其登陆,如果没有找到,说明没有登录,允许其登陆。

好,时间过得真的很快,又到了两点了,还没有困意,准备看一集老友记,此刻的你有没有进入梦乡呢?哦,我好喜欢瑞秋

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180122G012Y100?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

同媒体快讯

扫码关注腾讯云开发者

领取腾讯云代金券