监听器专门用于监听某个对象身上发生的动作和状态的改变,当被监视的对象发生上述动作时,监听器将立即采取相应的行动。
事件监听器需要实现事件源暴露出来的接口,并主注册到事件源上。
当事件源发生了某一动作的时候,就会创建事件对象,并针对接口调用事件监听器上的相应的方法。
事件的对象中封装了发生的动作,事件源等一系列信息。
Servlet中一共定义了三种类型的监听器,它们分别用于监听\
servletContext HttpSession ServletRequest这三个对象。
监听这三个对象的时候,按照所监听的动作可以分类成三种
监听三个对对象域的创建和销毁
监听域对象中的属性增加或者删除
监听绑定到HttpSession域中的某个对象的状态的事件监听器
Servlet监听器和其他监听器一样,编写servlet监听器需要实现暴露出来的接口,针对相应的动作去覆盖接口中相应的方法。
Servlet监听器注册不是注册在事件源上,而是通知WEB容器负责,我们只是用<listener>标签同时WEB容器注册我们编写好的事件监听器。
一个web.xml文件中可以注册多个Servlet事件监听器,web服务器按照顺序来加载和注册这些Servlet事件监听器。
servletContext域
创建:服务器每次启动的时候都针对每一个WEB应用创建servletCoontext
销毁:关闭服务器前先关闭代表每一个WEB应用的servletContext
HttpSession域
创建:在访问服务器页面,产生会话的时候就产生了HttpSession
销毁:tomcat在默认情况下无操作30分钟即HttpSession销毁,也可以用定时器设置时间让HttpSession自动销毁。
监听三个域对象属性变化接口分别是
ServletContextAttributeL
HttpSessionAttributeList
ServletRequestAttributeL
三个接口中都定义了三个方法来处理被监听对象中的接口属性的增加删除替换,同一时间在三个接口中的名称完全想相同,只是接受的参数类型不容。
attributeAdded方法
当向监听器监听的对象增加一个属性的时候,WEB容器就调用事件监听器的attribteAdded方法。这个方法接受一个参数,监听器可以通过这个参数来获得正在增加属性的域对象和被保存到域中的属性对象。
HttpSessionBindingListen
实现了这个接口的JAVABEAN可以感知自己被绑定到了Session中和从session中删除。
被绑定时候调用 void valueBound(HttpSessionBindingEvent event)方法
从HttpSession对象解除绑定的时候WEB服务器调用该对象的
void valueUnbound(httpSessionBindingEvent event)方法
实现了HttpSessionActivationLis
当绑定到的HttpSession对象被钝化之前,调用
void sessionWillPassivate(HttpSessionBindingEvent event)方法