`
Aether
  • 浏览: 13925 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
最近访客 更多访客>>
社区版块
存档分类
最新评论

JSP拾遗(八)——Listener

    博客分类:
  • Java
阅读更多

Javax.servlet中定义了三类监听器:ServletContex相关、ServletRequest相关、和HttpSession相关的监听器。

 

ServletContex相关监听器:

ServletContextListener:

实现该接口的对象可以接收到web应用中servlet上下文载入或销毁的事件通知。需要在配置文件(web.xml)里面设置。

定义有如下方法:

void contextInitialized(ServletContextEvent sce):servlet上下文开始初始化时触发;context初始化时,所有的ServletContextListener都将先于filterservlet的初始化前被通知。

void contextDestroyed(ServletContextEvent sce):在servlet上下文即将关闭时触发;context 关闭时,所有的filterservlet都将在ServletContextListener被通知前被destory()ed.

 

(事实上,contextListenerfilterservlet的初始化顺序依次是listenerfilterservlet,因此不可以反向引用它们的初始化数据,例如不能在filter初始化时使用servlet的初始化数据,不能在listener初始化时使用filterservlet里面的初始化数据)

 

ServletContextAttributeListener:

实现该接口的对象可以接收到web应用中servlet上下文配置变动的事件通知。需要在配置文件(web.xml)里面设置。

定义有如下方法:

void attributeAdded(ServletContextAttributeEvent scab):servlet上下文增加了一个属性时触发;

void attributeRemoved(ServletContextAttributeEvent scab):servlet上下文移除一个已存在的属性时触发;

void attributeReplaced(ServletContextAttributeEvent scab):servlet上下文替换一个已存在的属性时触发。

 

ServletContex相关监听器一般不需要应用程序来使用。除非你需要实时地检测配置项的信息更改,而如果必须得这样做的话,你最好把这些配置项存储在数据库中,然后提供一个更友好的UI来提供给用户更改,而不是直接修改配置文件。

 

ServletRequest相关监听器:

ServletRequestListener:当你希望接收到各种request请求进入(coming in)或离开(out of)一个web部件(component)的消息时,你可以通过实现这个接口来完成。当一个request开始进入每一个web应用的第一个servletfilter时,将触发进入(coming in)web应用事件,当一个request离开最后一个servletfilter链的第一个filter时,将触发一个离开(out of)web应用事件。(注意filter链的执行顺序)

定义有下面两个方法:

void requestDestroyed(ServletRequestEvent sre): request将离开一个web应用;

void requestInitialized(ServletRequestEvent sre) :request 将进入一个web应用。

 

    ServletRequestAttributeListener:当你希望接收到request的属性变更事件时,可以通过实现这个接口来完成。变更通知只在request处于web应用中的时候发出。Request处于一个web应用指的是,从一个request进入(coming in)web应用到离开(out of)web应用之间的时间。

定义有下面方法:

    void attributeAdded(ServletRequestAttributeEvent srae): 向一个request里面增加一个属性时触发;

    void attributeRemoved(ServletRequestAttributeEvent srae): 从一个request里面移除一个属性时触发;

    void attributeReplaced(ServletRequestAttributeEvent srae): 从一个request里面替换一个属性时触发。

 

    ServletRequest相关监听器很少使用,也许你在调试程序的时候希望用到它们。

 

    HttpSession相关监听器:

HttpSessionActivationListener: 绑定到session的对象可以侦听通知它们会话将被钝化和会话将被激活的容器事件。在 VM 之间迁移session或者保留session的容器需要通知绑定到实现 HttpSessionActivationListener session的所有属性。

定义有下面方法:

void sessionDidActivate(HttpSessionEvent se) : 通知会话刚刚被激活;

void sessionWillPassivate(HttpSessionEvent se):通知会话即将被钝化.

 

HttpSessionAttributeListener: 为了获取此 Web 应用程序内会话属性列表更改的通知,可实现此侦听器接口。

定义有下面方法:

void attributeAdded(HttpSessionBindingEvent se) :通知已将属性添加到会话。在添加属性之后调用;

void attributeRemoved(HttpSessionBindingEvent se) :通知属性已从会话中移除。在移除属性之后调用;

void attributeReplaced(HttpSessionBindingEvent se) : 通知已替换会话中的一个属性。在替换属性之后调用。 

 

HttpSessionBindingListener: 使对象在被绑定到会话或从会话中取消对它的绑定时得到通知。该对象通过 HttpSessionBindingEvent 对象得到通知。这可能是 servlet 编程人员显式从会话中取消绑定某个属性的结果(由于会话无效,或者由于会话超时)。

定义有下面方法:

void valueBound(HttpSessionBindingEvent event) :通知对象它将被绑定到某个会话并标识该会话;

void valueUnbound(HttpSessionBindingEvent event) :通知对象要从某个会话中取消对它的绑定并标识该会话。

 

HttpSessionListener: Web 应用程序中活动会话列表的更改将通知此接口的实现。要接收通知事件,必须在 Web 应用程序的部署描述符中配置实现类。

定义有下面方法:

void sessionCreated(HttpSessionEvent se) : 通知创建了一个会话;

void sessionDestroyed(HttpSessionEvent se) : 通知某个会话即将无效。

 

HttpSession相关监听器中,HttpSessionListener最为常用,同时也是所有监听器中最常用的一个。由于Session标识了客户端的信息,通过对session的创建和销毁事件的统计,可以很容易地实现web应用中在线人数的统计。结合cookie技术,我们就可以实现应用系统的单点登录,并据此来实现系统授权数量的限制功能。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics