【JavaWeb】监听器

18 篇文章 0 订阅

【JavaWeb】监听器

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);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值