Javaweb三大组件之Listener

1. Listener的广义概念

顾名思义,Listener就是监听器,监听主要是对ServletContext,HttpSession,ServletRequest这三大域对象的创建和销毁事件监听,还有就是对域对象属性的操作监听,当监听这些事件发生是就会进行一些适当的操作。

对于域独享属性操作的监听一般用的很少,主要介绍这三大域对象的监听器。

2. Javaweb四大域对象

域对象                     作用域

PageContext         当前jsp

ServletRequest      当前HTTP请求

HttpSession           当前会话

ServletContext       整个web服务器生命周期

上面是按照作用域从小到大排列的。

3. ServletContextListener介绍

ServletContextListener主要用于任务调度和Spring容器初始化的工作。

实现类:

public class ServletContextListenerDemo implements ServletContextListener{
    @Override
    public void contextInitialized(ServletContextEvent sce) {
        ServletContext sc = sce.getServletContext();
        System.out.println("ServletContextInitParams: "+sc.getInitParameter("ServletContextParam"));
        System.out.println("ServletContextListenerDemo has been created");
    }

    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        System.out.println("ServletContextListenerDemo hase been destroyed");
    }
}

通过实现ServletContextListener接口,然后按照自己的需求重写初始化和销毁的两个方法就可以了,ServletContextEvent对象可以获取到ServletContext对象,具体还有其他的api。

xml配置:

 <listener>
        <listener-class>com.lyh.Listener.ServletContextListenerDemo</listener-class>
 </listener>

4.HttpSessionListener介绍

HttpSessionListener是对HttpSession这个域对象进行监听的,可以用于统计实时在线人数,因为session是唯一的。

整个需要结合前面那个ServletContxtListener来合作使用,首先使用ServletContextListener在ServletContext创建之时就加入属性count=0表示当前在线的人数,然后用Session监听器监听Session创建,每当Session创建就计数加一,销毁就计数减一。

ServletContextListener中增加代码

@Override
    public void contextInitialized(ServletContextEvent sce) {
        ServletContext sc = sce.getServletContext();
        sc.setAttribute("count", 0);
    }

HttpSessionListener代码

public class HttpSessionListenerDemo implements HttpSessionListener{
    private Integer count;

    @Override
    public void sessionCreated(HttpSessionEvent se) {
        System.out.println("session has been created"+se.getSession().getId());
        ServletContext sc = se.getSession().getServletContext();
        count = (Integer) sc.getAttribute("count");
        synchronized (sc){
            sc.setAttribute("count", count+1);
        }
    }

    @Override
    public void sessionDestroyed(HttpSessionEvent se) {
        ServletContext sc = se.getSession().getServletContext();
        count = (Integer) sc.getAttribute("count");
        synchronized (sc) {
            sc.setAttribute("count", count - 1);
        }
        System.out.println("session has been destroyed");
    }
}

不要忘了xml配置

<listener>
        <listener-class>com.lyh.Listener.HttpSessionListenerDemo</listener-class>
</listener>

这样接下来只需要在jsp创建和销毁session测试就可以了。

5.ServletRequestListener介绍

这个监听器相对来说用的比较少,具体的使用方法和前面两个监听器是一样的,重写初始化和销毁方法然后添加xml配置就好了,ServletRequest对象的生命周期是一次请求中,所以请求结束就销毁了,一般监听器用的比较少,对象用的比较多。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值