最近突然发现了很多有趣的事,比如:当你懂的东西越多的时候,你就会明白你不懂的东西也越多。这句话听起来很诡异,但是你仔细想想是不是这个道理。
早上在床上突然萌生了一个想法: 我能不能每天坚持写一篇原创推文?要是原创就必须保持每天有输出,而且字数得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与访客关联起来,
用户重复,多处登陆问题的处理,肯能出现一个用户名在多处登陆,解决办法是,在用户登陆是先在在线用户表中查找该用户,如果找到说明已经登录,现在限制其登陆,如果没有找到,说明没有登录,允许其登陆。
好,时间过得真的很快,又到了两点了,还没有困意,准备看一集老友记,此刻的你有没有进入梦乡呢?哦,我好喜欢瑞秋
领取专属 10元无门槛券
私享最新 技术干货