JavaWeb监听器的使用(一)监听上下文和会话信息
1.监听上下文的类
package com.examp.ch9; import java.io.FileOutputStream; import java.io.PrintWriter; import java.util.Date; import javax.servlet.ServletContext; import javax.servlet.ServletContextAttributeEvent; import javax.servlet.ServletContextAttributeListener; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; public final class MyServletContextListener implements ServletContextListener, ServletContextAttributeListener { private ServletContext context = null; public void contextDestroyed(ServletContextEvent sce) { logout("调用contextDestroyed()方法-->ServletContext被销毁"); this.context = null; } public void contextInitialized(ServletContextEvent sce) { this.context = sce.getServletContext(); logout("调用contextInitialized()方法-->ServletContext初始化"); } public void attributeAdded(ServletContextAttributeEvent scae) { logout("调用attributeAdded('" + scae.getName() + "', '" + scae.getValue() + "')方法-->增加了一个属性"); } public void attributeRemoved(ServletContextAttributeEvent scae) { logout("调用attributeRemoved('" + scae.getName() + "', '" + scae.getValue() + "')方法-->删除了该属性"); } public void attributeReplaced(ServletContextAttributeEvent scae) { logout("调用attributeReplaced('" + scae.getName() + "', '" + scae.getValue() + "')方法-->更改了该属性"); } private void logout(String message) { PrintWriter out = null; try { out = new PrintWriter(new FileOutputStream("E:\\contextLog.txt", true)); out.println(new Date().toLocaleString() + message); out.close(); } catch (Exception e) { out.close(); e.printStackTrace(); } } }
2.监听Http会话的类
package com.examp.ch9; import java.io.FileOutputStream; import java.io.PrintWriter; import java.util.Date; import javax.servlet.ServletContext; import javax.servlet.ServletContextEvent; import javax.servlet.http.HttpSessionAttributeListener; import javax.servlet.http.HttpSessionBindingEvent; import javax.servlet.http.HttpSessionEvent; import javax.servlet.http.HttpSessionListener; /* * HttpSessionListener Http会话的创建、销毁 * HttpSessionAttributeListener 监听会话中属性的改变 */ public final class MySessionListener implements HttpSessionAttributeListener, HttpSessionListener { ServletContext context;//创建一个context对象 int users = 1;//初始化用户数量为1 /* * 在session中添加对象时触发此操作 笼统的说就是调用setAttribute这个方法时候会触发的 * */ public void attributeAdded(HttpSessionBindingEvent event) { logout("attributeAdded('" + event.getSession().getId() + "', '" + event.getName() + "', '" + event.getValue() + "')"); } /* * 修改、删除session中添加对象时触发此操作 笼统的说就是调用 removeAttribute这个方法时候会触发的 * */ public void attributeRemoved(HttpSessionBindingEvent event) { logout("attributeRemoved('" + event.getSession().getId() + "', '" + event.getName() + "', '" + event.getValue() + "')"); } /* * 在Session属性被重新设置时 * */ public void attributeReplaced(HttpSessionBindingEvent se) { logout("attributeReplaced('" + se.getSession().getId() + ",'" + se.getName() + "','" + se.getValue() + "')"); } /* * 新建一个会话时候触发也可以说是客户端第一次和服务器交互时候触发 */ public void sessionCreated(HttpSessionEvent event) { System.out.println(users); this.users += 1;//获取ID 和用户个数 logout("sessionCreated('" + event.getSession().getId() + "'),目前有" + this.users + "个用户"); this.context.setAttribute("users", new Integer(this.users));//将用户数存入context } /* * 销毁会话的时候 一般来说只有某个按钮触发进行销毁 或者配置定时销毁 * */ public void sessionDestroyed(HttpSessionEvent event) { this.users --; logout("sessionDestroyed('" + event.getSession().getId() + "'),目前有" + this.users + "个用户");//获取ID 和用户个数 this.context.setAttribute("users", new Integer(this.users));////将用户数存入context } public void contextDestroyed(ServletContextEvent sce) { logout("contextDestroyed()-->ServletContext被销毁"); this.context = null; } public void contextInitialized(ServletContextEvent sce) { this.context = sce.getServletContext(); logout("contextInitialized()-->ServletContext初始化了"); } private void logout(String message) { PrintWriter out = null; try { //创建输入流 写入文件 out = new PrintWriter(new FileOutputStream("E:\\sessionLog.txt", true)); out.println(new Date().toLocaleString() + "-->" + message); out.close(); } catch (Exception e) { out.close(); e.printStackTrace(); } } }
3.前端JSP文件
context_test.jsp
<%@ page contentType="text/html;charset=UTF-8"%> <% out.println("add attribute"); getServletContext().setAttribute("userName","Smith"); out.println("replace attribute"); getServletContext().setAttribute("userName","Kate"); out.println("remove attribute"); getServletContext().removeAttribute("userName"); %>
session_test.jsp
<%@ page contentType="text/html;charset=UTF-8"%> 执行了以下的操作: session.setAttribute("userName","Smith")<br> <% session.setAttribute("userName","Smith");%><!--添加属性--> session.setAttribute("userName","Kate")<br> <% session.setAttribute("userName","Kate");%><!--更改属性--> session.removeAttribute("userName","Kate")<br> <% session.removeAttribute("userName");%><!--删除属性--> 目前有<%=getServletContext().getAttribute("users")%>个用户。<br> after session.invalidate()<br> <% session.invalidate();%><!--销毁该session--> 目前有<%=getServletContext().getAttribute("users")%>个用户。
JavaWeb监听器的使用(一)监听上下文和会话信息的更多相关文章
- SpringBoot2.0 监听器ApplicationListener的使用-监听ApplicationReadyEvent事件
参考:http://www.shareniu.com/article/73.htm 一.需求是想将我的写一个方法能在项目启动后就运行,之前使用了redis的消息监听器,感觉可以照着监听器这个思路做,于 ...
- JavaWEB监听器
1.基本概念 JavaWeb中的监听器是Servlet规范中定义的一种特殊类,它用于监听web应用程序中的ServletContext, HttpSession和 ServletRequest等域对象 ...
- 监听域对象创建和销毁的Listener
1.什么是Servlet监听器? 先来看看什么是监听器.监听器是专门用于对其它对象身上发生的事件或状态改变进行监听和相应处理的对象,当被监视的对象发生情况时立即采取相应的行动.Servlet监听器是S ...
- javaweb监听器实现与原理
参考:https://www.cnblogs.com/lxp503238/p/6678688.html https://blog.csdn.net/CPOHUI/article/details/888 ...
- 【监听文件 多线程】使用java--WatchService监听文件 开启多线程copy文件
有一个小需求: 在PC跟前没有人的时候,迅雷下载文件 至PC磁盘上,并且自动移动文件到U盘上,小主只要在走的时候取走U盘即可. 基于这个需求,有了下面这段代码:[JDK 1.8] package c ...
- javascript事件监听与事件委托
事件监听与事件委托 在js中,常用到element.addEventListener()来进行事件的监听.但是当页面中存在大量需要绑定事件的元素时,这种方式可能会带来性能影响.此时,我们可以用事件 ...
- JAVAWEB监听器(二)
监听域对象中属性的变更的监听器 域对象中属性的变更的事件监听器就是用来监听 ServletContext, HttpSession, HttpServletRequest 这三个对象中的属性变更信息事 ...
- ALERT日志中常见监听相关报错之中的一个:ORA-609错误的排查
參考MOS文档有: Troubleshooting Guide ORA-609 : Opiodr aborting process unknown ospid (文档 ID 1121357.1) Al ...
- Java-Web监听器
在WEB端实现监听实质: 实现一系列的监听接口(实现相应的接口,覆写各接口中相应的方法,在相应的事件触发的时候会执行自己的监听器中的覆写的方法,在各个方法中完成自己想要的操作,从而实现了监听) 监听- ...
随机推荐
- LinkedList<E>源码分析
LinkedList的数据结构就是双向链表,如下所示: private static class Node<E> { E item;//数据元素 Node<E> next;// ...
- 理解SVG的viewport,viewBox,preserveAspectRatio
万丈高楼平地起,基础很重要. viewport 表示SVG可见区域的大小,或者可以想象成舞台大小,画布大小. <svg width="500" height="30 ...
- codevs 1490 【CTSC2008】 网络管理
题目链接:网络管理 好久没写这种类型的题了--手都生了-- 一句话题意:树上带修改的区间\(k\)大数.这题面怎么有点眼熟 显然树上的题目我们可以先在序列上考虑一下.区间带修改的区间\(k\)大数有两 ...
- elasticsearch5.0及head插件安装
这个瞎jb整了半天.准备把es2.4升级到5.0,结果老报错 环境:centos6.5+es2.4是ok的换成es5就出毛病.也不能说啥 ,我用的是最新的 源码解压启动时候报错,具体错误for ...
- [LeetCode] Permutations 全排列
Given a collection of numbers, return all possible permutations. For example,[1,2,3] have the follow ...
- vue 2.0 开发实践总结之疑难篇
续上一篇文章:vue2.0 开发实践总结之入门篇 ,如果没有看过的可以移步看一下. 本篇文章目录如下: 1. vue 组件的说明和使用 2. vuex在实际开发中的使用 3. 开发实践总结 1. ...
- IEEE 802.11p (WAVE,Wireless Access in the Vehicular Environment)
IEEE 802.11p(又称WAVE,Wireless Access in the Vehicular Environment)是一个由IEEE 802.11标准扩充的通讯协定.这个通讯协定主要用在 ...
- SQLSERVER 获取datetime日期的查询语句
SELECT varchar(10:57AM SELECT varchar(CONVERT(100), GETDATE(), 2): 11.05.16 SELECT varchar(CONVERT(1 ...
- css中,设置百分比后,让百分比的宽度包括padding和border来计算
*{ -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box;}
- 下拉框-ComboBox
<ComboBox Name="cbBox" SelectionChanged="cbBox_SelectionChanged"></Comb ...