Java Web中的Listener

Listerner:监听器,可以监听对象的创建、删除、属性绑定、属性删除、属性修改等,最常用的就是用来实现在线用户的统计

在Servlet中一共有8种监听器,可监听ServletContext、HttpSession、ServletRequest(不是HttpSerlvetRequest),按监听的域不同可分为3类:

 

1.  域对象的创建与销毁

ServletContextListener:

        contextInitialized():ServletContext容器初始化

        contextDestroyed():ServletContext容器销毁

 

HttpSessionListener:

        sessionCreated():session的创建

        sessionDestroyed():session的销毁

 

ServletRequestListener:

        requestInitialized():request的初始化

        requestDestroyed():request的销毁

 

2. 域对象中属性的创建、修改、销毁

ServletContextAttributeListener:

HttpSessionAttributeListener

ServletRequestAttributeListener

这三个监听器都有三个方法:

        attributeAdded()  添加属性

        attributeRemoved()  移出属性

        attributeReplaced()  替换属性

 

3. 感知型监听器:监听对象合时绑定到session,合时从session移除,合时序列化以及合时被存储到硬盘上

HttpSessionBindngListener:

valueBound():对象被绑定到Session

valueUnbound():对象被移出Session

 

HttpSessionActivationListener:

sessionDidActivate()对象激活

sessionWillPassivate()对象钝化

 

1、2两类监听器在创建时必须实现对应的接口,然后再web.xml中进行注册

实例:

/**
 * 实现了对SerlvetRequest生命周期和绑定在上面的属性的监听,也可以单独实现一个接口
 */
public class RequestHelpListener implements ServletRequestListener,ServletRequestAttributeListener {

	/**
	 * 销毁请求
	 */
	@Override
	public void requestDestroyed(ServletRequestEvent sre) {
		StringUtils.println("销毁ServletRequest");
	}

	/**
	 * 初始化请求	
	 */
	@Override
	public void requestInitialized(ServletRequestEvent sre) {
		StringUtils.println("创建ServletRequest");
	}

	/**
	 * 添加属性
	 */
	@Override
	public void attributeAdded(ServletRequestAttributeEvent srae) {
		StringUtils.println("向ServletContext添加属性");
	}
	/**
	 * 移除属性
	 */
	@Override
	public void attributeRemoved(ServletRequestAttributeEvent srae) {
		StringUtils.println("向ServletRequest移除属性");
	}
	/**
	 * 替换属性
	 */
	@Override
	public void attributeReplaced(ServletRequestAttributeEvent srae) {
		StringUtils.println("向ServletRequest替换属性");
	}

}

 

注册:

<listener>
	<description>监听ServeltRequest的创建、销毁,属性绑定、移出和修改</description>
	<display-name>ServeltRequest监听器</display-name>
	<listener-class>framework.web.listener.RequestHelpListener</listener-class>
</listener>

 

3类监听比较特别,如果需要监听某个对象合适被绑定在session上,只需要使该对象实现HttpSessionBindingListener即可,不需要在web.xml中注册

public class UserVO implements Serializable, HttpSessionBindingListener, HttpSessionActivationListener {

	/**
	 * 对象被绑定到Session
	 */
	@Override
	public void valueBound(HttpSessionBindingEvent event) {
		StringUtils.println("绑定UserVO");
	}

	/**
	 * 对象被移出Session
	 */
	@Override
	public void valueUnbound(HttpSessionBindingEvent event) {
		StringUtils.println("移除UserVO");
	}

	/**
	 * 对象激活
	 */
	@Override
	public void sessionDidActivate(HttpSessionEvent se) {
		StringUtils.println("激活UserVO");
	}

	/**
	 * 对象钝化
	 */
	@Override
	public void sessionWillPassivate(HttpSessionEvent se) {
		StringUtils.println("钝化UserVO");
	}

}

 (HttpSessionActivationListener我并不太懂,查了一下,应该是在分布式系统中使用的,当把某个session从一个jvm中移动到另一个jvm中时,需要先钝化保存这个session,再序列化到jvm中)

 

你可能感兴趣的:(web.xml,listener,Java Web,监听器)