首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

展示在线用户

2012-12-19 
显示在线用户方法一:用application对象。 简单描述如下: 当用户登录时维护一个会话对象:UserInfo类的实例,

显示在线用户

方法一:用application对象。 简单描述如下: 当用户登录时维护一个会话对象:UserInfo类的实例,同时UserInfo类实现javax.servlet.http.HttpSessionBindingListener接口: import java.util.Map; import java.util.HashMap; import javax.servlet.http.*; import javax.servlet.ServletContext; public class UserInfo implements HttpSessionBindingListener { // 用户信息 int userId; String userName; ...... /** * 当UserInfo类被绑定到session中时触发这个事件 * 具体信息请参见Servlet/JSPs的规范 */ public void valueBound(HttpSessionBindingEvent event) { HttpSession session = event.getSession (); ServletContext ctx = session.getServletContext (); Map map = (Map)ctx.getAttribute ("users"); if (map == null) { // 如果是服务器启动后的第一个登录用户,新建一个容器 map = new HashMap (); ctx.setAttribute ("users", map); } map.put (userName, this); // 把自己加入容器中 } /** * 当UserInfo类从session中删除时触发这个事件 * 具体信息请参见Servlet/JSPs的规范 */ public void valueUnbound(HttpSessionBindingEvent event) { HttpSession session = event.getSession (); ServletContext ctx = session.getServletContext (); Map map = (Map)ctx.getAttribute ("users"); map.remove (this); // 把自己从容器中删除 } ...... } 以后在JSP中就可以这样显示在线用户数了: <% int userCount = 0; java.util.Map map = (java.util.Map)application.getAttribute ("users"); if (map == 0) userCount = 0; else userCount = map.size (); %>; 当然你也可以不实现javax.servlet.http.HttpSessoinBindLisenter接口,而用自己的程序来实现这个功能,但这种方法最保险,也最简单。如果用户关掉浏览器,过一段时间后session就会超时,这时发触发valueUnbound事件方法二:servlet:package SessionCount;import javax.servlet.*;   import javax.servlet.http.*;   public class SessionCounter implements HttpSessionListener {   private static int activeSessions = 0;   public void sessionCreated(HttpSessionEvent se) {   activeSessions++;   }   public void sessionDestroyed(HttpSessionEvent se) {   if(activeSessions > 0)   activeSessions--;   }   public static int getActiveSessions() {   return activeSessions;   }   }web.xml<?xml version="1.0" encoding="UTF-8"?><web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">   <welcome-file-list>     <welcome-file>index.jsp</welcome-file>   </welcome-file-list>     <listener>   <listener-class>   SessionCount.SessionCounter   </listener-class>   </listener>      <session-config>   <session-timeout>1</session-timeout></session-config></web-app>test.jsp<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%@ page import="SessionCount.SessionCounter" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html>   <head>         <title>My JSP 'index.jsp' starting page</title><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0">    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="This is my page"><!--<link rel="stylesheet" type="text/css" href="styles.css">-->   </head>     <body>     在线人数:<%=SessionCounter.getActiveSessions()%>   </body></html>

?

热点排行