监听器种类数不胜数,监听器最常被应用在GUI中,不过网站中也可以设置监听器,这里我们利用sessionListener实现一个网站在线人数统计的监听来了解一下监听器的使用。
首先建立一个类来实现监听器OnlineListener.class- 1 package com.jms.listener;
- 2
- 3 import javax.servlet.ServletContext;
- 4 import javax.servlet.http.HttpSessionEvent;
- 5 import javax.servlet.http.HttpSessionListener;
- 6
- 7 public class OnlineListener implements HttpSessionListener{
- 8
- 9 //统计网站中在线人数
- 10
- 11 //创建session时,触发这个监听
- 12 @Override
- 13 public void sessionCreated(HttpSessionEvent se) {
- 14 ServletContext sctContext = se.getSession().getServletContext();
- 15 Integer onlinenumber = (Integer) sctContext.getAttribute("OnlineNumber");
- 16 if(onlinenumber == null) {
- 17 onlinenumber = 1;
- 18 } else {
- 19 onlinenumber += 1;
- 20 }
- 21 sctContext.setAttribute("OnlineNumber", onlinenumber);
- 22 }
- 23
- 24 //销毁session时,触发这个监听
- 25 @Override
- 26 public void sessionDestroyed(HttpSessionEvent se) {
- 27 ServletContext sctContext = se.getSession().getServletContext();
- 28 Integer onlinenumber = (Integer) sctContext.getAttribute("OnlineNumber");
- 29 if(onlinenumber > 0) {
- 30 onlinenumber -= 1;
- 31 }
- 32 sctContext.setAttribute("OnlineNumber", onlinenumber);
- 33 }
- 34
- 35
- 36 }
复制代码 编辑我们的index.jsp- <%@ page language="java" contentType="text/html; charset=UTF-8"
- pageEncoding="UTF-8"%>
- <!DOCTYPE html>
- <html>
- <head>
- <meta charset="UTF-8">
- <title>在线人数</title>
- </head>
- <body>
- <% response.setHeader("Refresh", "3"); %>
- <h1><span >当前在线人数:<%=pageContext.getServletContext().getAttribute("OnlineNumber") %></span></h1>
- </body>
- </html>
复制代码 修改web.xml- <listener>
- <listener-class>com.jms.listener.OnlineListener</listener-class>
- </listener>
复制代码 访问网站,测试一下效果如何
打开一个浏览器

打开第二个浏览器

设置的session过期时间为1分钟

(本文仅作个人学习记录用,如有纰漏,敬请指正)
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |