在线用户使用HttpSessionListener监听器统计
每当一个session会话建立 在线用户人数+1
每当一个session会话销毁 在线用户人数-1
使用ServletRequestListener监听器统计用户信息
每当一个request建立 将当前用户放入集合
每当session会话销毁 将当前用户移出集合
我使用的是Servlet3.0 监听器直接使用注解@webListener即可 不用在web.xml中布局
在web.xml中配置session-timeout标签 标志session过期时间为1分钟 0为不过期
				?
			
| 
 
								1
 
								2
 
								3
						  | 
<session-config> 
<session-timeout>1</session-timeout> 
</session-config>
 | 
servlet3.0使用条件
运行结果:
由于session对话关闭时间并不一定以设置的1分钟为准 所以 gif图像中最后等待时间较长
User 实体类
				?
			
| 
 
								1
 
								2
 
								3
 
								4
 
								5
 
								6
 
								7
 
								8
 
								9
 
								10
 
								11
 
								12
 
								13
 
								14
 
								15
 
								16
 
								17
 
								18
 
								19
 
								20
 
								21
 
								22
 
								23
 
								24
 
								25
 
								26
 
								27
 
								28
 
								29
 
								30
 
								31
 
								32
 
								33
 
								34
						  | 
package com.scx.entity; 
/** 
* 用户实体类 
* 
*/
public class User { 
//当前用户的session id 
private String sessionId; 
//当前用户的ip地址 
private String ip; 
//当前用户第一次访问的时间 
private String firstTime; 
public User() { 
super(); 
} 
public String getIp() { 
return ip; 
} 
public void setIp(String ip) { 
this.ip = ip; 
} 
public String getFirstTime() { 
return firstTime; 
} 
public void setFirstTime(String firstTime) { 
this.firstTime = firstTime; 
} 
public String getSessionId() { 
return sessionId; 
} 
public void setSessionId(String sessionId) { 
this.sessionId = sessionId; 
} 
} 
 | 
HttpSessionListener监听器
				?
			
| 
 
								1
 
								2
 
								3
 
								4
 
								5
 
								6
 
								7
 
								8
 
								9
 
								10
 
								11
 
								12
 
								13
 
								14
 
								15
 
								16
 
								17
 
								18
 
								19
 
								20
 
								21
 
								22
 
								23
 
								24
 
								25
 
								26
 
								27
 
								28
 
								29
 
								30
 
								31
 
								32
 
								33
 
								34
 
								35
 
								36
 
								37
 
								38
 
								39
						  | 
package com.scx.listener; 
import java.util.ArrayList; 
import javax.servlet.annotation.WebListener; 
import javax.servlet.http.HttpSessionEvent; 
import javax.servlet.http.HttpSessionListener; 
import com.scx.entity.User; 
import com.scx.util.SessionUtil; 
/** 
* HttpSessionListener 监听器 
* 
*/
@WebListener
public class MyHttpSessionListener implements HttpSessionListener{ 
//当前用户数 
private int userCounts=0; 
@Override
public void sessionCreated(HttpSessionEvent se) { 
//sessionCreated 用户数+1 
userCounts++; 
//重新在servletContext中保存userCounts 
se.getSession().getServletContext().setAttribute("userCounts", userCounts); 
} 
@Override
public void sessionDestroyed(HttpSessionEvent se) { 
//sessionDestroyed 用户数-1 
userCounts--; 
//重新在servletContext中保存userCounts 
se.getSession().getServletContext().setAttribute("userCounts", userCounts); 
@SuppressWarnings("unchecked") 
ArrayList<User> userList=(ArrayList<User>) se.getSession().getServletContext().getAttribute("userList"); 
String sessionId=se.getSession().getId(); 
//如果当前用户在userList中 在session销毁时 将当前用户移出userList 
if(SessionUtil.getUserBySessionId(userList, sessionId)!=null){ 
userList.remove(SessionUtil.getUserBySessionId(userList, sessionId)); 
} 
//将userList集合 重新保存到servletContext 
se.getSession().getServletContext().setAttribute("userList", userList); 
} 
} 
 | 
ServletRequestListener监听器
				?
			
                	
    
	
	
		
		
	
 
	
		
			
	
	 
     
	
			
                 
			
		
		
			
			
			
    
        
        
	
			
						
			
            			
    		
    		
		
	    
    	
    	
        
    	
    
| 
 
								1
 
								2
 
								3
 
								4
 
								5
 
								6
 
								7
 
								8
 
								9
 
								10
 
								11
 
								12
 
								13
 
								14
 
								15
 
								16
 
								17
 
								18
 
								19
 
								20
 
								21
 
								22
 
								23
 
								24
 
								25
 
								26
 
								27
 
								28
 
								29
 
								30
 
								31
 
								32
 
								33
 
								34
 
								35
 
								36
 
								37
 
								38
 
								39
 
								40
 
								41
 
								42
 
								43
 
								44
 
								45
 
								46
 
								47
						  | 
package com.scx.listener; 
import java.text.SimpleDateFormat; 
import java.util.ArrayList; 
import java.util.Date; 
import javax.servlet.ServletRequestEvent; 
import javax.servlet.ServletRequestListener; 
import javax.servlet.annotation.WebListener; 
import javax.servlet.http.HttpServletRequest; 
import com.scx.entity.User; 
import com.scx.util.SessionUtil; 
/** 
* ServletRequestListener 监听器 
* 
*/
@WebListener
public class MyServletRequestListener implements ServletRequestListener { 
//用户集合 
private ArrayList<User> userList; 
@Override
public void requestDestroyed(ServletRequestEvent arg0) { 
} 
@SuppressWarnings("unchecked") 
@Override
public void requestInitialized(ServletRequestEvent arg0) { 
//从servletContext中获的userList 
userList=(ArrayList<User>) arg0.getServletContext().getAttribute("userList"); 
//如果servletContext中没有userList对象 初始化userList 
if(userList==null){ 
userList=new ArrayList<User>(); 
} 
HttpServletRequest request=(HttpServletRequest) arg0.getServletRequest(); 
//sessionId 
String sessionId=request.getSession().getId(); 
//如果当前sessionId不存在集合中 创建当前user对象 
if(SessionUtil.getUserBySessionId(userList,sessionId)==null){ 
User user=new User(); 
user.setSessionId(sessionId); 
user.setIp(request.getRemoteAddr()); 
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd hh:MM:ss"); 
user.setFirstTime(sdf.format(new Date())); 
userList.add(user); 
} 
//将userList集合 保存到ServletContext 
arg0.getServletContext().setAttribute("userList", userList); 
} 
} 
 | 
工具类
				?
			
	
						
						
						
						
						
						
						
																		
    
        
    
        
                        
                
                    
                
                
                
                    
                
                
                
                    
                
                
                
                    
                
                        
    
 																		
						
																		
    
        
 												
						
																		
	
	
		
				
			
																		
						
						
					
				
				                | 
 
								1
 
								2
 
								3
 
								4
 
								5
 
								6
 
								7
 
								8
 
								9
 
								10
 
								11
 
								12
 
								13
 
								14
						  | 
package com.scx.util; 
import java.util.ArrayList; 
import com.scx.entity.User; 
public class SessionUtil { 
//根据sessionId判断当前用户是否存在在集合中 如果存在 返回当前用户 否则返回null 
public static User getUserBySessionId(ArrayList<User> userList,String sessionId) { 
for (User user : userList) { 
if(sessionId.equals(user.getSessionId())){ 
return user; 
} 
} 
return null; 
} 
} 
 | 
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持快网idc!
原文链接:http://blog.csdn.net/su20145104009/article/details/53217201
相关文章
             猜你喜欢
        
        - ASP.NET本地开发时常见的配置错误及解决方法? 2025-06-10
 - ASP.NET自助建站系统的数据库备份与恢复操作指南 2025-06-10
 - 个人网站服务器域名解析设置指南:从购买到绑定全流程 2025-06-10
 - 个人网站搭建:如何挑选具有弹性扩展能力的服务器? 2025-06-10
 - 个人服务器网站搭建:如何选择适合自己的建站程序或框架? 2025-06-10
 
			TA的动态
			
		
				- 2025-07-10 怎样使用阿里云的安全工具进行服务器漏洞扫描和修复?
 - 2025-07-10 怎样使用命令行工具优化Linux云服务器的Ping性能?
 - 2025-07-10 怎样使用Xshell连接华为云服务器,实现高效远程管理?
 - 2025-07-10 怎样利用云服务器D盘搭建稳定、高效的网站托管环境?
 - 2025-07-10 怎样使用阿里云的安全组功能来增强服务器防火墙的安全性?
 
快网idc优惠网
QQ交流群
				您的支持,是我们最大的动力!				
			
		
        热门文章
        
    
    - 
            2025-05-25 41
 - 
            
搬瓦工VPS服务器CPU性能评估:影响网站速度的关键因素是什么?
2025-06-04 16 - 
            2025-05-29 17
 - 
            2025-06-04 99
 - 
            2025-05-25 52
 
		热门评论
	
	
        


    		
            	
        
        
        