Javaweb监听器实例之统计在线人数
本文实例为大家分享了Javaweb统计在线人数示的具体代码,供大家参考,具体内容如下
1.实现功能
统计在线人数
显示每个人的sessionId、Ip、第一次登录时间
2.运用监听器种类
- HttpSession
- ServletRequest
3.实现思想
- 每一个用户对应着一个session,所以在每次session被创建时,num++;
- 实现一个用户类(sessionID、IP、Date)
- 获取IP地址的方法需要用request,所以我们要实现一个ServletRequest监听器
- 每一次请求对应着一个用户的创建
- 将所有的用户放在一个用户链表中
- 将链表通过ServletRequestEvent.getServletContext().setAttribute设置成全局变量
- 在主页遍历链表读出用户信息
4.包目录
5.代码实现
User
packageentity;
publicclassUser{
privateStringsessionID;
privateStringip;
privateStringfirstTime;
publicStringgetSessionID(){
returnsessionID;
}
publicvoidsetSessionID(StringsessionID){
this.sessionID=sessionID;
}
publicStringgetIp(){
returnip;
}
publicvoidsetIp(Stringip){
this.ip=ip;
}
publicStringgetFirstTime(){
returnfirstTime;
}
publicvoidsetFirstTime(StringfirstTime){
this.firstTime=firstTime;
}
}
MyHttpSessionListener
packagelistenner;
importjava.util.ArrayList;
importjavax.servlet.annotation.WebListener;
importjavax.servlet.http.HttpSessionEvent;
importjavax.servlet.http.HttpSessionListener;
importentity.User;
importutil.SessionUtil;
@WebListener
publicclassMyHttpSessionListenerimplementsHttpSessionListener{
privateintnum=0;//统计人数
publicvoidsessionCreated(HttpSessionEventse){
num++;
se.getSession().getServletContext().setAttribute("number",num);
}
@SuppressWarnings("unchecked")
publicvoidsessionDestroyed(HttpSessionEventse){
num--;
se.getSession().getServletContext().setAttribute("number",num);
//在此用户被销毁的时候,将链表中对应的用户对象删除
ArrayListuserlist=(ArrayList)se.getSession().getServletContext().getAttribute("userlist");
if(SessionUtil.getUserBySessionID(userlist,se.getSession().getId())!=null){
userlist.remove(SessionUtil.getUserBySessionID(userlist,se.getSession().getId()));
}
}
}
MyServeltRequestListener
packagelistenner;
importjava.text.SimpleDateFormat;
importjava.util.ArrayList;
importjava.util.Date;
importjavax.servlet.ServletRequestEvent;
importjavax.servlet.ServletRequestListener;
importjavax.servlet.annotation.WebListener;
importjavax.servlet.http.HttpServletRequest;
importentity.User;
importutil.SessionUtil;
@WebListener
publicclassMyServeltRequestListenerimplementsServletRequestListener{
@SuppressWarnings("unchecked")
publicvoidrequestInitialized(ServletRequestEventsre){
ArrayListuserlist=null;
//获取全局变量中的链表,若不存在,则创建一个新的链表
userlist=(ArrayList)sre.getServletContext().getAttribute("userlist");
if(userlist==null){
userlist=newArrayList();
}
//获取request对象
HttpServletRequestrequest=(HttpServletRequest)sre.getServletRequest();
//获取sessionID
StringsessionID=request.getSession().getId();
//通过sessionID在链表中查找对象,若没有此对象,则创建加入到链表中
if(SessionUtil.getUserBySessionID(userlist,sessionID)==null){
Useruser=newUser();
user.setSessionID(sessionID);
user.setFirstTime(newSimpleDateFormat("YYYY-MM-DDhh:mm:ss").format(newDate()));
user.setIp(request.getRemoteAddr());
userlist.add(user);
}
//将链表设置为全局变量
sre.getServletContext().setAttribute("userlist",userlist);
}
}
getUserBySessionID
packageutil;
importjava.util.ArrayList;
importentity.User;
publicclassSessionUtil{
//工具类,通过session在链表中找到相应的用户对象
publicstaticUsergetUserBySessionID(ArrayListuserlist,StringsessionID){
for(inti=0;i
index.jsp
<%@pageimport="entity.User"%>
<%@pageimport="java.util.ArrayList"%>
<%@pagelanguage="java"contentType="text/html;charset=UTF-8"pageEncoding="UTF-8"%>
当前在线人数:${number}
<%
ArrayListuserlist=(ArrayList)request.getServletContext().getAttribute("userlist");
if(userlist!=null){
for(inti=0;i
sessionID:<%=user.getSessionID()%>
IP:<%=user.getIp()%>
FirstName:<%=user.getFirstTime()%>
<%}}%>
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。