监听器小例子之统计在线人数

来源:互联网 发布:江西泰豪软件 编辑:程序博客网 时间:2024/06/11 15:00

监听器小例子


统计同时在线人数:

每当有一个用户登录的时候在服务器端创建一个session对象,写一个监听器,监听session的创建与销毁,每当创建一个session对象的时候就把计数器+1,然后保存到servletContext对象上,每当有一个用户下线的时候就销毁对应的session对象,把计数器-1,保存到servletContext上。

CountListener.java代码:


package web;import javax.servlet.ServletContext;import javax.servlet.http.HttpSession;import javax.servlet.http.HttpSessionEvent;import javax.servlet.http.HttpSessionListener;public class CountListener implements HttpSessionListener{private int count = 0; //计数器/** * session对象创建之后,容器会产生HttpSessionEvent事 * 件,然后调用sessionCreated方法。 */public void sessionCreated(HttpSessionEvent arg0) {System.out.println("sessionCreated start ...");count ++;//通过事件对象(HttpSessionEvent)找到sessionHttpSession session = arg0.getSession();ServletContext sctx = session.getServletContext();//将人数count绑定到servletContext,这样,可以随时访问。sctx.setAttribute("count",count);}/** * 容器在销毁session对象之后,会调用sessionDestroyed方 * 法。 */public void sessionDestroyed(HttpSessionEvent arg0) {System.out.println("sessionDestoyed start ...");count --;//通过事件对象(HttpSessionEvent)找到sessionHttpSession session = arg0.getSession();ServletContext sctx = session.getServletContext();//将人数count绑定到servletContext,这样,可以随时访问。sctx.setAttribute("count",count);}}


logout.jsp

因为关闭浏览器并不能销毁对应的session对象,故手动删除对应的session对象。

<%session.invalidate();%>



index.jsp

<body>  <h1>hello</h1>    This is my JSP page. <br>    <!-- ServletContext == application -->    在线人数:<%=application.getAttribute("count") %><br/>    <a href="logout.jsp">退出系统</a>  </body>

web.xml

<?xml version="1.0" encoding="UTF-8"?><web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">  <!-- 配置文件先后顺序    一般是:-->  <!-- 全局参数->过滤器->监听器->servlet、servlet-mapping->错误处理页面  -->  <!-- 全局初始化参数 -->  <context-param>  <param-name>company</param-name>  <param-value>hello</param-value>  </context-param>  <!-- 监听器 -->  <listener>  <listener-class>web.CountListener</listener-class>  </listener>  <!-- 首页  http://ip:port/appname -->  <welcome-file-list>    <welcome-file>index.jsp</welcome-file>  </welcome-file-list></web-app>

小知识:

 配置文件先后顺序    一般是:

   全局参数->过滤器->监听器->servlet、servlet-mapping->错误处理页面
 


0 0