Listener

Listener

一、Listener 简介

  • 监听器:专门用于对其他对象身上发生的事件或状态改变进行监听和相应处理的对象,当被监视的对象发生情况时,立即采取相应的行动。

  • Servlet 监听器:Servlet 规范中定义的一种特殊类,它用于监听 web 应用程序中的 ServletContext, HttpSession 和 ServletRequest 等域对象的创建与销毁事件,以及监听这些域对象中的属性发生修改的事件。

二、Servlet 监听器的分类

按监听的事件类型 Servlet 监听器可分为如下三种类型:

  1. 监听域对象(HttpSession,ServletContext,ServletRequest)自身的创建和销毁的事件监听器
  2. 监听域对象中的属性的增加和删除的事件监听器
  3. 监听绑定到 HttpSession 域中的某个对象的状态的事件监听器

三、编写 Servlet 监听器

  1. Servlet 规范为每种事件监听器都定义了相应的接口,开发人员编写的事件监听器程序只需实现这些接口,web 服务器根据用户编写的事件监听器所实现的接口把它注册到相应的被监听对象上

  2. 一些 Servlet 事件监听器需要在 web 应用程序的 web.xml 文件中进行注册,一个 web.xml 文件中可以注册多个 Servlet 事件监听器,web 服务器按照它们在 web.xml 文件中的注册顺序来加载和注册这些 Serlvet 事件监听器。

  3. Serlvet 事件监听器的注册和调用过程都是由 web 容器自动完成的,当发生被监听的对象被创建,修改或销毁事件时,web容器将调用与之相关的 Servlet 事件监听器对象的相关方法,开发人员在在这些方法中编写的事件处理代码即被执行

  4. 由于一个 web 应用程序只会为每个事件监听器创建一个对象,有可能出现多个线程同时调用同一个事件监听器对象的情况,所以,在编写事件监听器类时,应考虑多线程安全的问题


    public class HttpSessionListener implements javax.servlet.http.HttpSessionListener,
            ServletRequestListener,ServletContextListener {

        @Override
        public void sessionCreated(HttpSessionEvent arg0) {
            System.out.println("Session Created.");
        }

        @Override
        public void sessionDestroyed(HttpSessionEvent arg0) {
            System.out.println("Session Destroyed.");
        }


        @Override
        public void requestInitialized(ServletRequestEvent arg0) {
            System.out.println("Request Created");

        }
        @Override
        public void requestDestroyed(ServletRequestEvent arg0) {
            System.out.println("Request Destroyed");

        }

        @Override
        public void contextDestroyed(ServletContextEvent arg0) {
            System.out.println("ServletContext Destroyed");
        }

        @Override
        public void contextInitialized(ServletContextEvent arg0) {
            System.out.println("ServletContext Created");

        }
    }

四、Listener 的注册

1.编写完监听器类后需要在 web.xml 中配置 Listener

    <listener>
        <listener-class>cn.edu.pzhu.cg.listener.HttpSessionListener</listener-class>
    </listener>
2.在Servlet3.0中,监听器的配置可以直接在代码中通过注释来完成,无需在web.xml中再配置。

    @WebListener  //在此注明,以下类是监听器
    public class HttpSessionListener implements javax.servlet.http.HttpSessionListener{

        @Override
        public void sessionCreated(HttpSessionEvent arg0) {
            System.out.println("Session Created.");
        }

        @Override
        public void sessionDestroyed(HttpSessionEvent arg0) {
            System.out.println("Session Destroyed.");
        }

    }

五、getAttribute与getParameter的区别

  1. 从获取到数据的来源说:

    1. getAttribute 获取到的是 web 容器中的值。
    2. getParameter 获取到的是通过 http 传来的值。
  2. 从获取到的数据类型来说:

    1. getAttribute 返回的是一个 Object 对象。
    2. getParameter 返回的是一个字符串。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值