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监听器的主要内容,如果未能解决你的问题,请参考以下文章

JAVAWEB学习笔记23

JavaWeb学习笔记八 监听器

JAVAWEB学习笔记23_Listener和邮箱服务器

java技术学习路径之:Javaweb监听器总结(应用场景方法配置)

Servlet学习笔记

JavaWeb-Servlet笔记--- 监听器接口;应用监听器接口 优化在线考试管理系统