JavaWeb -- sevlet 监听器
1.三个域对象的监听(创建和销毁) servletContext, session, request 监听器
ServletContext监听器:
public class MyServletContextListener implements ServletContextListener { @Override
public void contextInitialized(ServletContextEvent sce) {
System.out.println("Context 初始化");
} @Override
public void contextDestroyed(ServletContextEvent sce) {
System.out.println("Context 销毁");
} }
web.xml 配置
<listener>
<listener-class>com.kevin.web.listener.MyServletContextListener</listener-class>
</listener>
Session监听器:
public class MyHttpSessionListener implements HttpSessionListener { @Override
public void sessionCreated(HttpSessionEvent se) {
System.out.println("Session 创建"); } @Override
public void sessionDestroyed(HttpSessionEvent se) {
System.out.println("Session 摧毁");
} }
Request监听器:
public class MyServletRequestListener implements ServletRequestListener { @Override
public void requestInitialized(ServletRequestEvent sre) {
System.out.println("request 创建"); } @Override
public void requestDestroyed(ServletRequestEvent sre) {
System.out.println("request 销毁"); }
}
监听器还可以监听三个域中所添加的属性变化:
public class MyServletContextAttributeListener implements
ServletContextAttributeListener { public void attributeAdded(ServletContextAttributeEvent scab) { System.out.println(scab.getValue());
System.out.println("加东西了!!"); } public void attributeRemoved(ServletContextAttributeEvent scab) {
System.out.println("删东西了!!");
} public void attributeReplaced(ServletContextAttributeEvent scab) {
System.out.println("替换东西了!!");
}
}
public class MyRequestAndSessionAttributeListener implements
HttpSessionAttributeListener, ServletRequestAttributeListener { public void attributeAdded(HttpSessionBindingEvent se) {
System.out.println("session中加东西了!!");
} public void attributeRemoved(HttpSessionBindingEvent se) {
System.out.println("session中删东西了!!");
} public void attributeReplaced(HttpSessionBindingEvent se) {
System.out.println("session中替换东西了!!");
} public void attributeAdded(ServletRequestAttributeEvent srae) {
System.out.println("request中加东西了!!");
} public void attributeRemoved(ServletRequestAttributeEvent srae) {
System.out.println("request中删东西了!!");
} public void attributeReplaced(ServletRequestAttributeEvent srae) {
System.out.println("request中替换东西了!!");
}
}
HttpSessionBindingListener HttpSessionActivationListener 这两个监听器 不需要再web.xml文件中配置
public class MyBean implements HttpSessionBindingListener { private String name; public void valueBound(HttpSessionBindingEvent event) {
System.out.println("自己被加到session中了");
} public void valueUnbound(HttpSessionBindingEvent event) {
System.out.println("自己被session踢出来了");
}
}
public class MyBean2 implements HttpSessionActivationListener,Serializable { public void sessionDidActivate(HttpSessionEvent se) {
System.out.println("session从硬盘回到内存了");
} public void sessionWillPassivate(HttpSessionEvent se) {
System.out.println("session被序列化到硬盘了");
}
}
2. 实例: 在线人数计数器
public class OnLineCountListener implements HttpSessionListener { @Override
public void sessionCreated(HttpSessionEvent se) { ServletContext context = se.getSession().getServletContext();
Integer num = (Integer) context.getAttribute("num");
if(num==null)
context.setAttribute("num", 1);
else
{
num++;
context.setAttribute("num", num);
} } @Override
public void sessionDestroyed(HttpSessionEvent se) { ServletContext context = se.getSession().getServletContext();
Integer num = (Integer) context.getAttribute("num");
if(num==null)
context.setAttribute("num", 1);
else
{
num--;
context.setAttribute("num", num);
}
} }
3. 实例: 自定义session扫描器
public class SessionScanerListener implements HttpSessionListener,ServletContextListener { private List<HttpSession> list = Collections.synchronizedList( new LinkedList<HttpSession>());
private Integer lock = 0; @Override
public void contextInitialized(ServletContextEvent sce) {
Timer timer = new Timer();
timer.schedule(new MyTask(list, lock) , 0, 1000*15); } @Override
public void sessionCreated(HttpSessionEvent se) {
HttpSession session = se.getSession();
synchronized (lock) {
list.add(session);
}
System.out.println(session + "创建了");
} @Override
public void sessionDestroyed(HttpSessionEvent se) {
HttpSession session = se.getSession();
System.out.println(session + "销毁了");
} @Override
public void contextDestroyed(ServletContextEvent sce) {
// TODO Auto-generated method stub }
} class MyTask extends TimerTask
{
private List<HttpSession> list;
private Integer lock; public MyTask(List<HttpSession> list, Integer lock)
{
this.list = list;
this.lock = lock;
} @Override
public void run() { synchronized (lock) {
System.out.println("定时器启动了");
ListIterator<HttpSession> it = list.listIterator();
while(it.hasNext())
{
HttpSession session = it.next();
if(System.currentTimeMillis()-session.getLastAccessedTime() > 1000*15)
{
session.invalidate();
list.remove(session);
}
}
}
}
}
JavaWeb -- sevlet 监听器的更多相关文章
- JavaWeb中监听器+过滤器+拦截器区别、配置和实际应用
JavaWeb中监听器+过滤器+拦截器区别.配置和实际应用 1.前沿上一篇文章提到在web.xml中各个元素的执行顺序是这样的,context-param-->listener-->fil ...
- JavaWeb基础—监听器Listener
javaWeb三大组件: servlet listener(用的不多) filter 什么叫监听器: 初次相见:AWT 二次相见:SAX(XML解析时)Bundle 绑定 监听器是一个接口,内容由我们 ...
- JavaWeb中监听器
一.事件源:三大域! ServletContext 生命周期监听:ServletContextListener,它有两个方法,一个在创建时调用,一个在销毁时调用: void contextIniti ...
- JavaWeb 之监听器
1. JavaWeb 监听器概述 在 JavaWeb 被监听的事件源为: ServletContext, HttpSession, ServletRequest, 即三大域对象. 监听域对象" ...
- Javaweb基础--->监听器listener(转发)
JavaWeb中的监听器 1.基本概念 JavaWeb中的监听器是Servlet规范中定义的一种特殊类,它用于监听web应用程序中的ServletContext, HttpSession和 Servl ...
- IT兄弟连 JavaWeb教程 监听器1
1 基本概念 监听器是一个专门用于对其他对象身上发生的事件或状态改变进行监听和相应处理的对象,当被监视的对象发生情况时,立即采取相应的行动.监听器其实就是一个实现特定接口的普通java程序,这个程序 ...
- 深入分析JavaWeb Item38 -- 监听器(Listener)高速学习
一.监听器介绍 1.1.监听器的概念 监听器是一个专门用于对其它对象身上发生的事件或状态改变进行监听和对应处理的对象,当被监视的对象发生情况时,马上採取对应的行动.监听器事实上就是一个实现特定接口的普 ...
- 深入分析JavaWeb Item39 -- 监听器(Listener)学习进阶
一.监听域对象中属性的变更的监听器 域对象中属性的变更的事件监听器就是用来监听 ServletContext, HttpSession, HttpServletRequest 这三个对象中的属性变更信 ...
- javaweb之监听器详解
在servlet中定义了多种类型的监听器,他们用于监听事件源分别是servletContext,httpsession,servletrequest 这三个域对象. servlet中监听器主要有三类: ...
随机推荐
- LeetCode Problem 136:Single Number
描述:Given an array of integers, every element appears twice except for one. Find that single one. Not ...
- MVC路由自定义及视图找寻规则
这篇关于MVC路由及视图规则本来是昨天要发的,但是本人真的有点懒,终于今天忍无可忍了.初学MVC的时候比现在还菜一点(现在也很菜),想着会用就行,但是有时还是会好奇,为什么它能找到控制器?为什么控制器 ...
- EasyNVR智能云终端硬件与EasyNVR解决方案软件综合对比
背景分析 互联网视频直播越来越成为当前视频直播的大势,对于传统的安防监控,一般都是局限于内网,无法成批量上云台.传统的海康和大华的平台虽然可以通过自身私有协议上云平台 集总管控,但是往往只是支持自身的 ...
- p:nth-last-child(2)
<!DOCTYPE html><html><head><style> p:nth-last-child(2){background:#ff0000;}& ...
- js验证表单大全3
2 >表单提交验证类 2.1 表单项不能为空 <scriptlanguage="javascript"> <!-- function CheckForm( ...
- python四个带 key 参数的函数(max、min、map、filter)
四个带 key 参数的函数: max()点击查看详细 min()点击查看详细 map()点击查看详细 filter()点击查看详细 1)max(iterable, key) key:相当于对可迭代对象 ...
- 我的Android进阶之旅------>解决Bug:打开eclipse报错,发现了以元素 'd:skin' 开头的无效内容。此处不应含有子元素。
今天来打开Eclipse 报错了,错误信息如下: [2015-08-01 09:07:43 - Android SDK] Error when loading the SDK: Error: Erro ...
- Codeforces 240F. TorCoder 线段树
线段树统计和维护某一区间内的字母个数.. . . F. TorCoder time limit per test 3 seconds memory limit per test 256 megabyt ...
- Centos6.3下Ganglia3.6.0安装配置
近期安装Ganglia.因为之前Linux基础基本为0.因此费了非常大的周折.最后在失败了好多次之后最终看到了梦寐以求的web界面.以下总结下这几天来的工作. ganglia是一个监控软件,他包括三部 ...
- 我的第一个Python小程序
猜年龄,如果大了提示小点,如果小了,提示大点 涉及的知识点: 1.变量 2.注释 3.接收交互式的输入 4.类型转换 5.while循环 6.if..elif..else多条件分支语句 # Autho ...