大数据WEB阶段(十六)JavaEE三大 核心技术之监听器Listener
2017-12-11 21:53
471 查看
Listener监听器
一、概述
Servlet三大核心技术之一 Servlet、Filter、ListenerServlet技术规范中定义了八种监听器用来监听web应用开发中对应的事件。
监听器可以用来监听web应用执行过程中相关的事件 , 来进行相应的处理
二、 开发一个监听器
写一个类实现监听器接口在web.xml文件中配置监听器
三、监听三大作用域创建和销毁的监听器
ServletContextListener生命周期 :
创建:在web应用启动时创建出来 , 之后一直驻留在内存中唯一代表当前web应用 ,
销毁:直到web应用被移除或 服务器 关闭时随着web应用销毁 , ServletConextListener也跟着被销毁
作用范围 : 整个web应用内
主要功能 : 在整个web应用作用范围并且在生命周期中共享数据
案例:
写一个类实现监听器接口 public class MyServletContextListener implements ServletContextListener{ public void contextDestroyed(ServletContextEvent sce) { System.out.println("servletContext被销毁"+sce.getServletContext()); } public void contextInitialized(ServletContextEvent sce) { System.out.println("servletContext被创建"+sce.getServletContext()); } } 在web.xml文件中注册监听器 <listener> <listener-class>com.tj.listener.MyServletContextListener</listener-class> </listener> 下面两个监听方式的开发方式相同
HttpSessionListener
生命周期:
创建:第一次调用request.getSession()时创建
销毁:
自杀 :调用session.invalidate()
超时: 发呆时间超过session存活时间(默认30分钟)
扩展: 修改session销毁时间为1分钟 <session-config> <session-timeout>1</session-timeout> </session-config>
意外身亡:服务器非正常关闭
扩展:session钝化 、 活化 1. 钝化: 在服务器正常关闭时, 仍然在存活期间的session会被序列化后保存在tomcat的work目录下 2. 活化: 在服务器正常启动时 , 将仍在存活期间的session读取到内存中 。继续使用
作用范围 : 整个会话
主要功能: 在整个会话范围内 ,整个会话的生命周期内共享数据
ServletRequestListener
生命周期:
创建:请求开始时创建
销毁:请求结束时销毁
作用范围: 一次请求响应
主要功能: 在请求过程中、作用范围内共享数据
四、 监听三大作用域中属性增加和减少的监听器
ServletContextAtrributeListener案例
创建一个类 , 并实现对应的接口 public class MyHttpSessionAttributeListener implements HttpSessionAttributeListener{ public void attributeAdded(HttpSessionBindingEvent se) { System.out.println("session域中添加了属性"+se.getName()+":"+se.getValue()); } public void attributeRemoved(HttpSessionBindingEvent se) { System.out.println("session域中移除了属性:"+se.getName()+":"+se.getValue()); } public void attributeReplaced(HttpSessionBindingEvent se) { System.out.println("session域中有属性被替换:"+se.getName()+":"+se.getValue()+"值被替换为:"+se.getSession().getAttribute(se.getName())); } } 在web.xml文件中注册 <listener> <listener-class>com.tj.listener.MyHttpSessionAttributeListener</listener-class> </listener> 下面两个开发方式相同
HttpServletSessionAtrributeListener
ServletRequestAtrributeListener
五、使JavaBean自己感知自己在session作用域中状态变化的监听器
HttpSessionBindingListener使JavaBean自己感知自己在session域中被加入或移除的监听器
HttpSessionActivationListener
使JavaBean自己感知自己在session域被钝化、活化监听器
注意:
这两个监听器比较特殊 , 不需要单独创建和在web.xml文件中配置 , 在需要在JavaBean中实现这两个接口就可以了 。
钝化实际上是序列化的过程 , 要将JavaBean随着session钝化 , 就需要JavaBean实现Serlizeable接口 , 表示这个JavaBean可以被序列化和反序列化 。 JavaBean随着session的活化而被移入内存中 ,虽然JavaBean内的属性值一致 ,但早已不是原先的那个JavaBean了 。
案例:
public class Person implements HttpSessionBindingListener,HttpSessionActivationListener,Serializable { private String name; private int age; public Person() { } public Person(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public void valueBound(HttpSessionBindingEvent event) { System.out.println("javabean自己感知到自己被存入session了。。。"); } public void valueUnbound(HttpSessionBindingEvent event) { System.out.println("javabean自己感知到自己被移除出session了。。。"); } public void sessionWillPassivate(HttpSessionEvent se) { System.out.println("javabean自己感知到自己随着session被钝化了。。。"); } public void sessionDidActivate(HttpSessionEvent se) { System.out.println("javabean自己感知到自己随着session被活化了。。。"); } }
六、监听器的应用
开发MyServletContextListener 。 在web应用启动ServletContext创建时 , 向ServletContext域中添加app属性 , 值为当前应用的路径 , 在servletContext销毁时删除该属性 , 这样以后需要在JSP页面中写pageContext.request.getCntextPath的地方直接替换为{app}就可以了代码:
public class MyServletContextListener implements ServletContextListener{ public void contextDestroyed(ServletContextEvent sce) { sce.getServletContext().setAttribute("app", sce.getServletContext().getContextPath()); } public void contextInitialized(ServletContextEvent sce) { sce.getServletContext().removeAttribute("app"); } } 在web.xml文件中注册监听器 <listener> <listener-class>com.tj.listener.MyServletContextListener</listener-class> </listener>
相关文章推荐
- 大数据WEB阶段(十五)JavaEE三大核心技术之过滤器
- tomcat监听器ServletContextListener加载web应用数据
- web数据采集核心技术分享系列(四)利用神经网络实现网页验证码破解
- web数据采集核心技术分享系列(四)利用神经网络实现网页验证码破解
- web数据采集核心技术分享系列(三)如何破解验证码?图像分析?特征匹配?人工智能?第三方集成?...哪个最强大?
- web数据采集核心技术分享系列(一)做一个强大的web数据采集系统,你需要什么?
- web数据采集核心技术分享系列(三)如何破解验证码?图像分析?特征匹配?人工智能?第三方集成?...哪个最强大?
- 大数据WEB阶段(十二)会话技术、Cookie、Session及两者的区别
- web数据采集核心技术分享系列(二)如何提取信息?字符串?正则?xpath?xslt?自定义?...什么才是王道?
- javaweb核心技术servlet
- 基于Web的数据挖掘技术与应用研究
- Ajax技术(WEB无刷新提交数据)- 及ajax出生
- 大数据核心技术与应用论坛:业务应用及技术生态圈探索
- 使用 JSP 技术和 JDBC 技术访问基于 Web 的动态数据
- Thinking in BigData(六)大数据技术核心之ETL
- [Spring]web.xml中配置ContextLoaderListener监听器的作用
- XML与面向Web的数据挖掘技术
- 深入揭示Web 2.0核心技术——混搭
- 深入揭示Web 2.0核心技术——混搭
- spring web.xml中 监听器(Listener)的工作原理和代码演示