JSP事件监听机制(Listener)

在基于JSP/Servlet的Web开发中,在配置web.xml文件时,有时候会需要配置一些Listener元素。那么在Web开发中,都有哪些Listener呢,它们各自都有什么作用,下面将对这个问题做个介绍

            在基于Windows的桌面系统中,事件机制很常用,通过这种机制,一个监听器类(Listener)可以在特定的事件(Event)发生时,采取一些行为。在基于JSP/Servlet的Web开发中我们通常使用的Listener也是基于这样一种事件机制。它只有在特定的事件发生时,才会产生响应。

            打开一份Servlet API 文档,在javax.servlet和javax.servlet.http两个包下,能够找到一共8个以Listener结尾的接口以及6个以Event结尾的类,它们共同构成了Servlet的事件处理模型。当你需要针对某个事件进行处理时,只需要构建一个Listener类,实现相应的Listener接口即可。

1、ServletContextListener 接口

          该接口主要是监听应用的启动和终止,并在应用启动时或者应用终止前执行一些用户行为。如在应用启动时初始化应用的全局变量。 
         【接口方法】contextInitialized() 与 contextDestroyed() 
         【事件参数】ServletContextEvent(getServletContext()可以返回应用的上下文对象) 
         【触发场景】在容器加载Web应用程序时(例如启动容器之后),会触发contextInitialized()方法,而当容器移除Web应用程序时,会触发contextDestroyed ()方法。

2、ServletContextAttributeListener 接口

          该接口主要监听应用上下文中的属性列表的变化,并在变化发生时执行一些用户行为。
         【接口方法】attributeAdded()、 attributeReplaced()、attributeRemoved() 
         【接收事件】ServletContextAttributeEvent (通过事件可以得到上下文对象,以及发生变化的属性的Name和Value)
         【触发场景】若有属性被加入到application(ServletContext)对象,则会触发attributeAdded()方法,同理在替换属性和移除属性时,会分别触发attributeReplaced()、attributeRemoved()方法。

3、ServletRequestListener 接口

          该接口用来监听请求到达和结束,并在请求达到前和请求结束前执行一些用户行为。 
         【接口方法] requestInitialized() 与 requestDestroyed() 
         【接收事件] RequestEvent(通过事件可以得到应用上下文对象和正在监听的请求对象) 
         【触发场景] 在request(HttpServletRequest)对象建立或被消灭时,会分别触发requestInitialized()和requestDestroyed()方法。

4、ServletRequestAttributeListener 接口

          该接口用来监听请求对象中属性列表的变化,并在变化发生后执行一些用户行为。
         【接口方法】attributeAdded()、 attributeReplaced()、attributeRemoved() 
         【接收事件】ServletRequestAttributeEvent(通过事件可以得到上下文对象、请求对象以及发生变化的属性的Name和Value) 
         【触发场景】若有属性加入到request(HttpServletRequest)对象,则会触发attributeAdded(),同理在替换属性与移除属性时,会分别触发attributeReplaced()、 attributeRemoved()。

5、HttpSessionListener 接口

          该接口用来监听Web应用中session列表的改变,并在某个session对象建立和销毁之前执行一些用户行为
         【接口方法】sessionCreated()与sessionDestroyed () 
         【接收事件】HttpSessionEvent(通过事件可以得到发生变化的session对象)
         【触发场景】在一个session(HttpSession)对象建立或被消灭时,会分别触发sessionCreated()和sessionDestroyed()方法。

6、HttpSessionAttributeListener 接口

          该接口用来监听某个session的属性列表的变化,并在变化发生后执行一些用户行为。
         【接口方法】attributeAdded()、 attributeReplaced()、attributeRemoved() 
         【接收事件】HttpSessionBindingEvent(通过事件可以得到变化的session以及变化的属性的Name和Value) 
         【触发场景】若有属性加入到某个session(HttpSession)对象,则会触发attributeAdded(),同理在替换属性与移除属性时,会分别触发attributeReplaced()、 attributeRemoved()。

7、HttpSessionActivationListener 接口

         【接口方法】sessionDidActivate()与 sessionWillPassivate() 
         【接收事件】HttpSessionEvent(通过事件可以得到发生变化的session对象) 
         【触发场景】Activate与Passivate是用于置换对象的动作,当session对象为了资源利用或负载平衡等原因而必须暂时储存至硬盘或其它储存器时(透过对象序列化),所作的动作称之为Passivate,而硬盘或储存器上的session对象重新加载JVM时所采的动作称之为Activate,所以容易理解的,sessionDidActivate()与sessionWillPassivate()分别于Activeate后与将Passivate前呼叫。

8、HttpSessionBindingListener 接口

         【接口方法】valueBound()与valueUnbound() 
         【接收事件】HttpSessionBindingEvent(通过事件可以得到变化的session以及变化的属性的Name和Value)
         【触发场景】实现HttpSessionBindingListener接口的类,其实例如果被加入至session(HttpSession)对象的属性中,则会触发valueBound(),如果被从session(HttpSession)对象的属性中移除,则会触发valueUnbound(),实现HttpSessionBindingListener接口的类不需在web.xml中注册。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值