博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
监听器Listener
阅读量:7091 次
发布时间:2019-06-28

本文共 2472 字,大约阅读时间需要 8 分钟。

hot3.png

什么是监听器?

  • 一个实现特定接口的普通java程序,这个程序专门用于监听另一个java对象的方法调用或属性改变,当被监听对象发生上述事件后,监听器某个方法将立即被执行

  • 由于Servlet技术存在三个数据域范围:ServletContext 、HttpSession、ServletRequest,所以Servlet监听器主要监听上面三个域对象的创建和销毁、属性变更以及状态变化

  • Servlet监听器分类:

    • 三个域范围对象创建和销毁监听器

      ServletContextListener

      HttpSessionListener

       ServletRequestListener  

    • 三个域范围对象属性变更监听器

      ServletContextAttributeListener

       HttpSessionAttributeListener

      ServletRequestAttributeListener   

    • HttpSession范围中对象的自我状态感知监听器

      HttpSessionBindingListener

      HttpSessionActivationListener

 javaweb监听器创建步骤

  1. 创建一个类,实现指定的监听器接口      
  2. 重写接口中的方法.
  3. 在web.xml文件中配置监听

域对象创建和销毁监听器

 

ServletContextListener 

171813_kzNb_3669094.png

  • 可以使用注解,可以在web.xml中配置

  • 监听 ServletContext 对象的创建和销毁

  • ServletContext对象生命周期

    • 服务器启动时创建,服务器正常关闭时销毁

  • ServletContextListener 企业应用

    • 保存全局唯一数据对象,获得ServletContext

    • 加载框架配置文件 spring

    • 启动定时器(固定时间需要自动运行程序)

HttpSessionListener

171930_WpTo_3669094.png

  • 可以使用注解,可以在web.xml中配置

  • 监听session对象创建和销毁

  • Session的生命周期

    • Session的创建 :request.getSession();

    • Session的销毁 :服务器非正常关闭、session超时(配置web.xml setMaxInactiveInterval)、session.invalidate

  • tomcat对session保存数据,默认是在正常关闭服务器时,将session中数据序列化硬盘上

ServletRequestListener

172001_DzJJ_3669094.png

  • 可以使用注解,可以在web.xml中配置

  • 监听request对象创建销毁

  • request的生命周期

    • request创建 :客户端提交请求时

    • request销毁 ;响应结束时

 

域对象属性变更监听器

  • 可以使用注解,可以在web.xml中配置

  • Servlet规范定义了监听 ServletContext, HttpSession, HttpServletRequest 这三个对象中的属性变更信息事件的监听器

    • ServletContextAttributeListener

    • HttpSessionAttributeListener

    • ServletRequestAttributeListener

  • 这三个接口中都定义了三个方法来处理被监听对象中的属性的增加,删除和替换的事件,同一个事件在这三个接口中对应的方法名称完全相同,只是接受的参数类型不同

    • attributeAdded() : 某个属性被添加时,web容器调用事件监听器的这个方法进行相应

    • attributeRemoved() : 某个属性被移除时,web容器调用事件监听器的这个方法进行相应

    • attributeReplaced() : 某个属性被替换时,web容器调用事件监听器的这个方法进行相应

 

HttpSession中对象状态感知监听器

  • 无需配置注解,或在web.xml中配置

  • HttpSession中对象的状态

    • 将对象保存在Session中

    • 将对象从session中移除

    • 当一个对象长时间存在Session中,而Session没有使用,将Session对象数据序列化硬盘(钝化)

    • 当使用一个已经钝化对象,需要从硬盘上将对象加载到内存(活化)

HttpSessionBindingListener

  • 负责绑定和解除绑定的监听

  • 如果一个对象已经在session存在中,再次存入时,会触发一次绑定和一次解除绑定

HttpSessionActivationListener

  • 负责钝化和活化的监听

示例代码

  • 在当前工程 WebRoot/META-INF/context.xml文件中配置以下内容

 实现对应的JavaBean.需要特别注意对应的JavaBean需要实现Serializable接口,否则是无法序列化到本地的.

public class User implements HttpSessionActivationListener, Serializable {	private String name;	public String getName() {		return name;	}	public void setName(String name) {		this.name = name;	}	// 如果该类没有实现Serializable接口,将无法序列化到本地硬盘	// 当活化时,也无法读取到对应的数据	public void sessionDidActivate(HttpSessionEvent se) {		System.out.println("对象被活化了");	}	public void sessionWillPassivate(HttpSessionEvent se) {		System.out.println("对象被钝化了");	}}

 

转载于:https://my.oschina.net/px828261/blog/1550956

你可能感兴趣的文章
转-Pentaho技术白皮书中文版(三)--构建新组件
查看>>
SpringSrcureCode在grails中实现用户--角色--权限的管理
查看>>
java Servlet 下载 itext 生成的2003 word 文档(java生成word文档3)
查看>>
Delphi 查找标题已知的窗口句柄,遍历窗口控件句柄(转)
查看>>
单例模式
查看>>
最锋利的jQuery源码、电子书及视频教程合集(共46个)
查看>>
JavaScript 内置对象!
查看>>
解决ubuntu下打不开rar文件
查看>>
内核启动过程
查看>>
在使用ibatis实现多条件模糊查询的语句
查看>>
童宁_下一代数据中心的安全挑战
查看>>
android 3g状态及信号监测
查看>>
开源 java CMS - FreeCMS2.8 站点管理
查看>>
JSP中include指令和include行为区别
查看>>
关于zend studio 9.0版本汉化
查看>>
java web编程学习6
查看>>
CSS学习笔记——最基础的定义与使用
查看>>
形象的网络状况工具
查看>>
linux下mysql的root密码忘记解决方法
查看>>
Test
查看>>