JavaWeb学习笔记-15监听器
Posted Moon&&Dragon
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaWeb学习笔记-15监听器相关的知识,希望对你有一定的参考价值。
监听器
1、概念
servlet中的一组组件,用来监听servlet事件的响应处理
主要监听request,session,上下文处理数据,请求响应,容器创建对象,删除对象
2、监听器接口
-
ServletRequestListener
实现该接口的监听器,可以对每一次的请求进行监听
-
ServletContextListener
实现该接口的监听器,可以对上下文的进行监听
-
HttpSessionListener
实现该接口的监听器,可以对会话进行监听,可以监听登陆/登出
3、实现监听器
实现监听器的方式很简单,只需要一个java类来实现对应的监听器接口,然后在对应的实现方法中去进行业务逻辑的书写。
监听器书写完后,需要配置监听器,可以在web.xml配置,也可以通过注解
@WebListener
来进行配置
3.1 通过监听器实现对登陆的用户的计数
/**
* @author 晓龙
* @version 1.8.271
* @ProtectName JavaWeb
* @ClassName CountListenter
* @Description TODO
* @createTime 2021年04月23日 20:46:00
*/
@WebListener
public class CountListenter implements HttpSessionListener {
// 计数默认0
private int count = 0;
/**
* 监听服务器会话的创建
*
* @param se
*/
@Override
public void sessionCreated(HttpSessionEvent se) {
// 有用户登陆,计数加1
count++;
// 获得上下文
ServletContext sc = se.getSession().getServletContext();
// 在上下文中设置数量
sc.setAttribute("count",count);
System.out.println("count="+count);
}
/**
* 监听服务器会话的销毁:必须调用session的销毁方法,浏览器关了,session不会销毁
*
* @param se
*/
@Override
public void sessionDestroyed(HttpSessionEvent se) {
// 有用户登出,计数减1
count--;
// 获取上下文
ServletContext sc = se.getSession().getServletContext();
// 更新上下文数量
sc.setAttribute("count",count);
}
}
3.2 通过监听器实现登出时对用户数据的移除
/**
* @author 晓龙
* @version 1.8.271
* @ProtectName JavaWeb
* @ClassName MyLoginListener
* @Description TODO
* @createTime 2021年04月23日 21:28:00
*/
@WebListener
public class MyLoginListener implements HttpSessionListener {
@Override
public void sessionCreated(HttpSessionEvent se) {
}
@Override
public void sessionDestroyed(HttpSessionEvent se) {
HttpSession session = se.getSession();
System.out.println("session销毁");
// 获得上下文
ServletContext sc = session.getServletContext();
// 获得map
Map<UserInfo,String> loginMap = (Map<UserInfo, String>) sc.getAttribute("loginMap");
// 移除当前信息
UserInfo user = (UserInfo) session.getAttribute("userSession");
loginMap.remove(user);
// 重新绑定
sc.setAttribute("loginMap",loginMap);
}
}
以上是关于JavaWeb学习笔记-15监听器的主要内容,如果未能解决你的问题,请参考以下文章