Servlet中的Listener。

在整个Tomcat服务器中,Listener使用得非常广泛,他是基于观察者模式设计的,Listener的设计为开发Servlet应用程序提供了一种快捷的手段,能够方便从另一个纵向维度控制程序和数据。目前在Servlet中提供6种两类事件的观察者接口,他们分别是:EventListeners类型的ServletContextAttributeListener、ServletRequestAttributeListener、ServletRequestListener、HttpSessionAttributeListener和LifecycleListeners类型的ServletContextListener、HttpSessionListener,如下图所示。

实际上,这6个Listener都继承了EventListener接口,每个Listener各自定义了需要实现的接口,这些接口如下表所示。

Listener类含有的接口接口说明
ServletContextAttributeListener

AttributeAdded

(ServletContextAttributeEvent scab)

当调用servletContext.setAttribute方法时触发这个接口

AttributeRemoved

(ServletContextAttributeEvent scab)

当调用servletContext.removeAttribute方法时触发这个接口

AttributeReplaced

(ServletContextAttributeEvent scab)

如果在调用servletContet.setAttribute之前该attribute已经存在,则替换这个attribute时,这个接口被触发
ServletRequestAttributeListener

AttributeAdded

(ServletRequestAttributeEvent srae)

当调用request.setAttribute方法时触发这个接口

AttributeRemoved

(ServletRequestAttributeEvent srae)

当调用request.removeAttribute方法时触发这个接口

AttributeReplaced

(ServletRequestAttributeEvent srae)

如果在调用request.setAttribute之前该attribute已经存在,则替换这个attribute时这个接口被触发
ServletRequestListener

requestInitialized

(ServletRequestEvent sre)

当HttpServletRequest对象被传递到用户的Servlet的service方法之前该方法被触发

requestDestoryed

(ServletRequestEvent sre)

当HttpServletRequest对象在调用完用户的Servlet的service方法之后该方法被触发
HttpSessionAttributeListener

attributeAdded

(HttpSessionBindingEvent se)

session.setAttribute方法被调用时该接口被触发

attributeRemoved

(HttpSessionBindingEvent se)

session.removeAttribute方法被调用时该接口被触发

attributeReplaced

(HttpSessionBindingEvent se)

如果在调用session.setAttribute之前该attribute已经存在,则替换这个attribute时这个接口被触发
ServletContextListener

contextInitialized

(ServletContextEvent sce)

Context容器初始化时触发,在所有的Filter和Servlet的init方法调用之前contextInitialized接口先被调用

contextDestoryed

(ServletContextEvent sce)

Context容器销毁,在所有的Filter和Servlet的destory方法调用之后contextDestoryed接口被触发
HttpSessionListener

SessionCreated

(HttpSessionEvent se)

当一个session对象被创建时触发

SessionDestroyed

(HttpSessionEvent se)

当一个session对象被失效时触发

他们基本上涵盖了整个Servlet生命周期中你感兴趣的每种事件。这些Listener的实现类可以配置在web.xml<Listener>标签中。当然也可以在应用程序中动态添加Listener,需要注意的是ServletContextListener在容器启动之后就不能再添加新的,因为他所监听的事件已经不会再出现了。掌握这些Listener的使用方法,能够让我们的程序设计得更加灵活。
如Spring的org.springframework.web.context.ContextLoaderListener就实现了一个ServletContextListener,当容器加载时启动Spring容器。ContextLoaderListener在contextInitialized方法中初始化Spring容器,有几种办法可以加载Spring容器,通过在web.xml的<context-param>标签中配置Spring的applicationContext.xml路径,文件名可以任意取,如果没有配置,将在/WEB-INF/路径下查找默认的applicationContext.xml文件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值