Spring 监听器

Spring 监听器


1.监听器是一个专门用于对其他对象身上发生的事件或状态改变进行监听和相应处理的对象,当被监视的对象发生情况时,立即采取相应的行动。
2.监听器其实就是一个实现特定接口的普通java程序,这个程序专门用于监听另一个java对象的方法调用或属性改变,当被监听对象发生上述事件后,监听器某个方法立即被执行。


java的事件监听机制
1、事件监听涉及到三个组件:事件源、事件对象、事件监听器
2、当事件源上发生某一个动作时,它会调用事件监听器的一个方法,并在调用该方法时把事件对象传递进去,开发人员在监听器中通过事件对象,就可以拿到事件源,从而对事件源进行操作。


ServletRequestListener
用于监听用户请求的到达,实现该接口的监听器需要实现如下两个方法。
requestInitialized(ServletRequestEvent sre):用户请求到底、被初始化时触发该方法。
requestDestroyed(ServletRequestEvent sre):用户请求结束、被销毁时触发该方法。


ServletRequestAttributeListener
1.用于监听ServletRequest(request)范围内属性的变化,实现该接口的监听器需要实现attributeAdded、attributeRemoved、attributeReplaced三个方法。
2.ServletRequestAttributeListener与ServletContextAttributeListener的作用相似,都用于监听属性的改变,只是ServletRequestAttributeListener监听request范围内属性的改变,而ServletContextAttributeListener监听的是application范围内属性的改变。


HttpSessionListener
用于监听用户session的创建和销毁,实现该接口的监听器需要实现如下两个方法。
sessionCreated(HttpSessionEvent se):用户与服务器的会话开始、创建时时触发该方法。
sessionDestroyed(HttpSessionEvent se):用户与服务器的会话断开、销毁时触发该方法。


HttpSessionAttributeListener
1.用于监听HttpSession(session)范围内属性的变化,实现该接口的监听器需要实现attributeAdded、attributeRemoved、attributeReplaced三个方法。
2.HttpSessionAttributeListener与ServletContextAttributeListener的作用相似,都用于监听属性的改变,只是HttpSessionAttributeListener监听session范围内属性的改变,而ServletContextAttributeListener监听的是application范围内属性的改变。


ServletContextListener
当Servlet 容器启动或终止Web 应用时,会触发ServletContextEvent 事件,实现该接口的监听器需要实现如下两个方法。
contextInitialized(ServletContextEvent sce) :当Servlet 容器启动Web 应用时调用该方法。在调用完该方法之后,容器再对Filter 初始化,并且对那些在Web 应用启动时就需要被初始化的Servlet 进行初始化。
contextDestroyed(ServletContextEvent sce) :当Servlet 容器终止Web 应用时调用该方法。在调用该方法之前,容器会先销毁所有的Servlet 和Filter 过滤器。


ServletContextAttributeListener
ServletContextAttributeListener用于监听ServletContext(application)范围内属性的变化,实现该接口的监听器需要实现如下三个方法。
attributeAdded(ServletContextAttributeEvent event):当程序把一个属性存入application范围时触发该方法。
attributeRemoved(ServletContextAttributeEvent event):当程序把一个属性从application范围删除时触发该方法。
attributeReplaced(ServletContextAttributeEvent event):当程序替换application范围内的属性时将触发该方法。


例子:
1、编写监听器
package com.proserver.common.controller.Test.Listener;

import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

public class MyHttpSessionListener  implements HttpSessionListener {

	@Override
	public void sessionCreated(HttpSessionEvent se) {
		// TODO Auto-generated method stub
		System.out.println( se.getSession() + "sessionCreated 创建了!!");
	}

	@Override
	public void sessionDestroyed(HttpSessionEvent se) {
		// TODO Auto-generated method stub
		System.out.println("sessionDestroyed 销毁了!!");
	}
}



package com.proserver.common.controller.Test.Listener;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

public class MyServletContextListener implements ServletContextListener {

	@Override
	public void contextInitialized(ServletContextEvent sce) {
		// TODO Auto-generated method stub
		System.out.println("contextInitialized 对象创建");
	}

	@Override
	public void contextDestroyed(ServletContextEvent sce) {
		// TODO Auto-generated method stub
		System.out.println("contextDestroyed 对象销毁");
	}
}



package com.proserver.common.controller.Test.Listener;

import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener;

public class MyServletRequestListener implements ServletRequestListener {

	@Override
	public void requestDestroyed(ServletRequestEvent sre) {
		// TODO Auto-generated method stub
		System.out.println(sre.getServletRequest() + "requestDestroyed 销毁了!!");
	}

	@Override
	public void requestInitialized(ServletRequestEvent sre) {
		// TODO Auto-generated method stub
		System.out.println(sre.getServletRequest() + "requestInitialized 创建了!!");
	}
}



2、在web.xml文件中注册监听器
<listener>
	<description>HttpSessionListener监听器</description>
	<listener-class>com.proserver.common.controller.Test.Listener.MyServletContextListener</listener-class>
</listener>
<listener>
	<description>HttpSessionListener监听器</description>
	<listener-class>com.proserver.common.controller.Test.Listener.MyHttpSessionListener</listener-class>
</listener>
<session-config>
	<session-timeout>1</session-timeout>
</session-config>
<listener>
	<description>ServletRequestListener监听器</description>
	<listener-class>com.proserver.common.controller.Test.Listener.MyServletRequestListener</listener-class>
</listener>



参考原文: http://book.51cto.com/art/201104/253574.htm
参考原文: http://blog.csdn.net/niuch1029291561/article/details/7867735

猜你喜欢

转载自huangyongxing310.iteye.com/blog/2327745