1、6种监听事件类型- ServletContextEvent 上下文事件,当应用上下文对象发生改变,如创建或销毁上下文对象时,将触发上下文事件。
- ServletContextAttributeEvent 上下文属性事件,当应用上下文的属性改变,如增加、删除、覆盖上下文中的属性时,将触发上下文属性事件。
- ServletRequestEvent 请求事件,当请求对象发生改变,如创建或销毁请求对象时,触发请求事件。
- ServletRequestAttributeEvent 请求属性事件,当请求中的属性改变,如增加、删除、覆盖请求中的属性时,触发请求属性事件。
- HttpSessionEvent 会话事件,当会话对象发生改变,如创建或销毁会话对象,活化或钝化会话对象时,将触发会话事件。
- HttpSessionBindingEvent 会话绑定事件,当会话中的属性发生变化时,如增加、删除、覆盖会话中的属性时,将触发会话绑定事件。
2、8种监听器接口- ServletContextListener 上下文监听器,监听ServletContextEvent事件。
- ServletContextAttributeListener 上下文属性监听器,用来监听ServletContextAttribute事件。
- ServletRequestListener 请求监听器,监听ServletRequestEvent事件。
- ServletRequestAttributeListener 请求属性监听器,用来监听ServletRequestAttributeEvent事件。
- HttpSessionListener 会话监听器,监听HttpSessionEvent。
- HttpSessionActivationListener 会话活化监听器,监听HttpSessionEvent事件。
- HttpSessionAttributeListener 会话属性监听器,监听HttpSessionAttributeEvent事件。
- HttpSessionBindingListener 会话绑定监听器,监听HttpSessionAttributeEvent事件。
3. 利用监听器把前面的聊天室进行改进上下文的创建与销毁监听器,记录聊天室的创建和解散 messages = new ArrayList<>(); ArrayList userList = new ArrayList<>(); sce.getServletContext().setAttribute("userList", userList); sce.getServletContext().setAttribute("messages", messages); }} 会话的创建与销毁监听器,记录在线的用户。 messages = (ArrayList) servletContext.getAttribute("messages"); ArrayList userList = (ArrayList) servletContext.getAttribute("userList"); String userId = se.getSession().getId(); userList.add(userId); SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式 String sendTime = df.format(new Date());// new Date()为获取当前系统时间 Message message = new Message(); message.setUserName("系统提示"); message.setContent("欢迎"+userId+"加入"); message.setSendTime(sendTime); messages.add(message); servletContext.setAttribute("userList", userList); servletContext.setAttribute("messages", messages); } @Override public void sessionDestroyed(HttpSessionEvent se) { ServletContext servletContext = se.getSession().getServletContext(); System.out.println("用户退出"); ArrayList messages = (ArrayList) servletContext.getAttribute("messages"); ArrayList userList = (ArrayList) servletContext.getAttribute("userList"); String userId = se.getSession().getId(); userList.remove(userId); SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式 String sendTime = df.format(new Date());// new Date()为获取当前系统时间 Message message = new Message(); message.setUserName("系统提示"); message.setContent("用户"+userId+"已退出聊天室"); message.setSendTime(sendTime); messages.add(message); servletContext.setAttribute("userList", userList); servletContext.setAttribute("messages", messages); }} 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |