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());
    }
}

 

posted @ 2023-02-13 18:22  在博客做笔记的路人甲  阅读(19)  评论(0编辑  收藏  举报