Servlet_3_监听器
对于作用域内对象(request、session、application)的监听,当他们发送变动时能够进行相应的处理。
一、使用步骤
1、编写监听器类:实现对应的接口,重写对应的方法,在方法内进行过滤操作。注意:不能在重写的方法内调用父类的此方法,不然服务器会错误报错。
2、在web.xml中配置此过滤器的生效范围。
二、监听器的接口
1、监听request对象,实现接口:ServletRequestListener
2、监听request对象的属性,实现接口:ServletRequestAttributeListener
3、监听session对象,实现接口:HttpSessionListener
4、监听session对象的属性,实现接口:HttpSessionAttributeListener
5、监听application对象,实现接口:ServletContextListener
6、监听application对象的属性,实现接口:ServletContextAttributeListener
在具体实现的方法中
1、可以获取到监听的对象
//获取request对象 HttpServletRequest request = (HttpServletRequest) sre.getServletRequest(); //获取session对象 HttpSession session = se.getSession(); //获取application对象 ServletContext servletContext = sce.getServletContext();
2、可以获取到属性的内容
//获取键名 String key = srae.getName(); //获取值 Object value = srae.getValue();
三、例子
web.xml中配置监听器:
<!--配置监听器--> <listener> <listener-class>com.lurenjia.listener.MainListener</listener-class> </listener>
例子1:
实现了监听 request 的状态,可以获取到此request对象。
public class MainListener implements ServletRequestListener { @Override public void requestDestroyed(ServletRequestEvent sre) { //request对象被销毁的时候执行 System.out.println("嗷,监听到一个request对象被销毁了"); } @Override public void requestInitialized(ServletRequestEvent sre) { //获取到request对象 HttpServletRequest request = (HttpServletRequest) sre.getServletRequest(); System.out.println("啊,监听到了一个request对象创建!"); //request对象被创建的时候执行 } }
例子2:
实现了监听request对象作用域的状态,可以获取到作用域内的内容。
public class MainListener implements ServletRequestAttributeListener { @Override public void attributeAdded(ServletRequestAttributeEvent srae) { //新增属性时候出发 //获取属性的键名,值 String key = srae.getName(); Object value = srae.getValue(); System.out.println("监听到request对象新建了一组信息,键名为:"+key); } @Override public void attributeRemoved(ServletRequestAttributeEvent srae) { //移除属性时触发 System.out.println("监听到request中这个键值对被移除了:"+srae.getName()+"-"+srae.getValue()); } @Override public void attributeReplaced(ServletRequestAttributeEvent srae) { //修改属性时触发 System.out.println("监听到request中这个键值对的值改变了:"+srae.getName()+"-"+srae.getValue()); } }