java—实现一个监听器HttpServletRequest的创建销毁、在线人数 (56)

java—实现一个监听器HttpServletRequest的创建销毁、在线人数 (56)

在JavaWeb中的监听器分类

       在Javaweb中存在三个被监听对象:

       HttpServletRequest

       HttpSessoin

       ServletContext

监听者

被监听者

监听到事件对象

HttpSessionActivationListener

HttpSession – 监听HttpSession活化和顿化。

HttpSessionEvent 

HttpSessionAttributeListener[W1] 

HttpSession – 监听session的属性变化的。S.setAttributee();

HttpSessionBindingEvent 

HttpSessionBindingListener

HttpSession - 监听哪一个对象,绑定到了session上。S.setAtrri(name,User);

 

HttpSessionListener[W2] 

HttpSesion – 监听sessioin创建销毁

HttpSessionEvent

ServletContextAttributeListener

ServletContext – 属性变化的

 

ServletContextListener

servletContext 创建销毁

 

ServletRequestListener - serlvetRequestAttibuteListner

Rrequest -创建销毁

 


实现一个监听器HttpServletRequest的创建销毁

第一步:实现一个类:

package cn.hx.listener;

import javax.servlet.ServletRequestEvent;

import javax.servlet.ServletRequestListener;

public class RequestListener implements ServletRequestListener {

    public void requestDestroyed(ServletRequestEvent sre) {

        System.err.println("request销毁了:");

        Object o = sre.getSource();

        System.err.println("这个o is :"+o);//apache.RequestFaced@22222

    }

    public void requestInitialized(ServletRequestEvent sre) {

        System.err.println("request创建了:");

        Object o = sre.getSource();

        System.err.println("这个o是 :"+o);//apache.RequestFaced@22222

    }

}

 

第二步:必须要配置到web.xml

<listener>

    <listener-class>cn.itcast.listener.RequestListener</listener-class>

  </listener>

 

说明:

1:配置一个Listener只要求提供类名就可以了。

2:在tomcat启动时,会自动的初始化这个监听器类。

3:tomcat创建的Listner,Serlvet,Filter都是单列的.

 

 在线人数

只要有人访问本站点,成功创建一个Session就是一个会话,一个会话就是一个在线人数。

用HttpSSessionListener来监听Session的创建。

第一步:

package cn.hx.listener;

import java.util.ArrayList;

import java.util.List;

import javax.servlet.ServletContext;

import javax.servlet.http.HttpSession;

import javax.servlet.http.HttpSessionEvent;

import javax.servlet.http.HttpSessionListener;

/**

 * 以下实现在线人数的统计

 */

public class MySessionListener implements HttpSessionListener {

    private Integer online=1;

    //request.getSession();

    public void sessionCreated(HttpSessionEvent se) {

        System.err.println("有人访问本网点了");

        HttpSession hs1 = (HttpSession) se.getSource();

        HttpSession hs2 = se.getSession();

        System.err.println("hs1:"+hs1.getId()+","+hs2.getId()+",ip:");

        //获取整个域的对象

        ServletContext sc= se.getSession().getServletContext();

        sc.setAttribute("online",online++);

        //将所有session放到servletContext

        //先从application获取所有已经维护的sesison

        List<HttpSession> list = (List<HttpSession>) sc.getAttribute("sessions");

        if(list==null){//第一个访问的人

            list = new ArrayList<HttpSession>();

            sc.setAttribute("sessions", list);

        }

        list.add(hs2);

    }

    //过期(30),s.invalidate();

    public void sessionDestroyed(HttpSessionEvent se) {

        System.err.println("有人退出了..."+se.getSession().getId());

        ServletContext sc= se.getSession().getServletContext();

        sc.setAttribute("online",online--);

    }

}

posted @ 2015-05-07 18:18 hongxinerke 阅读( ...) 评论( ...) 编辑 收藏
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值