开发环境: IntelliJ IDEA
一、什么是监听器
是指专门用于对其他对象身上发生的事件或状态改变进行监听和相应处理的对象,当被监视的对象发生变化时,立即采取相应的行动。
具体参考下文:
Java监听器详解
二、创建并配置监听器
1.首先创建一个空的maven项目,在pom.xml配置文件中导入下面这几个包:
javax.servlet servlet-api 2.5 javax.servlet.jsp jsp-api 2.1 javax.servlet.jsp.jstl jstl-api 1.2 taglibs standard 1.1.2 mysql mysql-connector-java 5.1.47
maven的一个优点:自动帮你从网上下载你需要的jar包
这几个包可能在本篇博客中不会有什么关联,但它们是javaweb项目中经常使用到的jar包
2.在src/java目录下创建包和类(自行命名),比如我的命名是:
包:cn.edu.xit.listener
类:OnlineCountListener
OnlineCountListener这个类就是监听器
package cn.edu.xit.listener;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
//统计网站在线人数:统计session
public class OnlineCountListener implements HttpSessionListener {
//创建session监听: 看你的一举一动
//一旦创建一个session,就会触发一次这个
public void sessionCreated(HttpSessionEvent httpSessionEvent) {
//要想统计session,作用域要提到最高
ServletContext servletContext = httpSessionEvent.getSession().getServletContext();
System.out.println(httpSessionEvent.getSession().getId());
Integer onlinecount= (Integer) servletContext.getAttribute("OnlineCount");
if(onlinecount==null){
onlinecount = new Integer(1); //用int也行,这里用的是封装整型类的操作,等价于onlinecount = 1;
}else{
int count = onlinecount.intValue();
onlinecount = new Integer(count+1); //等价于 onlinecount += 1;
}
//每次都在更新自己,有累加
servletContext.setAttribute("OnlineCount", onlinecount);
}
//销毁session监听
//一旦session销毁,就会触发
public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
ServletContext servletContext = httpSessionEvent.getSession().getServletContext();
Integer onlinecount= (Integer) servletContext.getAttribute("OnlineCount");
if(onlinecount==null){
onlinecount = new Integer(0);
}else{
int count = onlinecount.intValue();
onlinecount = new Integer(count-1);
}
//每次都在更新自己,有累加
servletContext.setAttribute("OnlineCount", onlinecount);
}
}
- 在web.xml中配置监听器
cn.edu.xit.listener.OnlineCountListener
三、观察访问网站的id
上面这些操作都完成之后,就可以在jsp里面测试了。
这里注意,在创建空的maven项目的时候可能会没有webapp文件夹,所以可以右击项目,点击Add FrameWork Support,选择Web Application,就可以创建web文件夹。
把maven自带的index.jsp稍加修改
<%--
Created by IntelliJ IDEA.
User: 86152
Date: 2022/4/28
Time: 12:23
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
$Title$
当前有 <%=this.getServletConfig().getServletContext().getAttribute("OnlineCount")%>人在线


