zoukankan      html  css  js  c++  java
  • 监听器

    监听器存在以下对象
    监听者:XxxxxListener - 所的监听者是的接口
    被监听者 :任意对象都可以成为被监听者 - 早已经存在
    监听到的事件:XxxxEvent- 永远是一个具体类,用来放监听到的数据
    里面都有一个方法叫getSource() – 返回的是监听到对象

    观察者模式:

     1 public class TestObersver {
     2     public static void main(String[] args) {
     3         Person person = new Person();//声明被观察者
     4         System.err.println("pp:"+person);
     5         person.addPersonListener(new PersonListener() {
     6             public void running(PersonEvent pe) {
     7                 System.err.println("你正在跑....."+pe.getSource());
     8                 throw new RuntimeException("他跑了。。。");
     9             }
    10         });
    11         person.run();
    12     }
    13 }
    14 class Person{
    15     private PersonListener pl;
    16     public void addPersonListener(PersonListener pl){
    17         this.pl = pl;
    18     }
    19     public void run(){
    20         if(pl!=null){
    21             pl.running(new PersonEvent(this));
    22         }
    23         System.err.println("我正在跑步......");
    24     }
    25 }
    26 interface PersonListener{
    27     void running(PersonEvent pe);
    28 }
    29 class PersonEvent{
    30     private Object src;
    31     public PersonEvent(Object obj) {
    32         this.src=obj;
    33     }
    34     public Object getSource(){
    35         return src;
    36     }
    37 }

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

    1:配置一个Listener只要求提供类名就可以了
    2:在tomcat启动时,会自动的初始化这个监听器类
    3:tomcat创建的Listner,Serlvet,Filter都是单例的

     1 /**
     2  * 以下实现在线人数的统计
     3  */
     4 public class MySessionListener implements HttpSessionListener {
     5     private Integer online=1;
     6     //request.getSession();
     7     public void sessionCreated(HttpSessionEvent se) {
     8         System.err.println("有人访问本网点了");
     9         HttpSession hs1 = (HttpSession) se.getSource();
    10         HttpSession hs2 = se.getSession();
    11         System.err.println("hs1:"+hs1.getId()+","+hs2.getId());
    12         //获取整个域的对象
    13         ServletContext sc= se.getSession().getServletContext();
    14         //将所有session放到servletContext
    15         sc.setAttribute("online",online++);
    16         
    17         //先从application获取所有已经维护的sesison
    18         List<HttpSession> list = (List<HttpSession>) sc.getAttribute("sessions");
    19         if(list==null){//第一个访问的人
    20             list = new ArrayList<HttpSession>();
    21             sc.setAttribute("sessions", list);
    22         }
    23         list.add(hs2);
    24     }
    25     //过期(30)或者s.invalidate();
    26     public void sessionDestroyed(HttpSessionEvent se) {
    27         System.err.println("有人退出了..."+se.getSession().getId());
    28         ServletContext sc= se.getSession().getServletContext();
    29         sc.setAttribute("online",online--);
    30     }
    31 }

    HttpSessionAttributeListener (重点类)

     1 public class AttributeListener implements HttpSessionAttributeListener {
     2     //sessoin.setAttribute("addr",中国北京);
     3     public void attributeAdded(HttpSessionBindingEvent e) {
     4         String name = e.getName();//--addr
     5         Object value = e.getValue();//获取sesion的value值
     6         System.err.println("添加了一个新的属性:"+name+","+value);
     7     }
     8     //session.removeAttribute("addr"); - tomcat容器
     9     public void attributeRemoved(HttpSessionBindingEvent e){
    10         String name = e.getName();
    11         Object value = e.getValue();
    12         System.err.println("删除了一个属性:"+name+","+value);
    13     }
    14     //sessoin.setAttribute("addr",中国北京);
    15     //sessoin.setAttribute("addr",上海);
    16     public void attributeReplaced(HttpSessionBindingEvent e) {
    17         String name = e.getName();
    18         Object oldValue = e.getValue();
    19         HttpSession session = e.getSession();
    20         Object newValue = session.getAttribute(name); 
    21         System.err.println("重新设置了一个值:"+name+","+oldValue+",newValue:"+newValue);    
    22     }
    23 }
  • 相关阅读:
    LeetCode_4——寻找两个有序数组的中位数
    Java的CAS与ABA问题
    跨域问题解决
    解决git-for-windows官网下载速度慢的问题
    Java对观察者模式的支持
    Java动态代理
    设计模式七大原则
    UML中的类图关系
    布隆过滤器(Bloom Filter)与Hash算法
    Ubuntu16安装fabric1.4.4环境
  • 原文地址:https://www.cnblogs.com/ylfeiu/p/3614626.html
Copyright © 2011-2022 走看看