javaweb listener 对象的创建销毁-监听

来源:互联网 发布:js代码混淆后如何还原 编辑:程序博客网 时间:2024/05/20 10:52
1、javaweb listener 对象的创建销毁--监听
web监听器 
    主要有三类: 
        1.ServletContext:对servlet上下文(application对象)进行监听 
        2.Session:对session监听 
        3.Request:对request的监听 

    监听器是一个实现特定接口的普通java类,这个程序专门用于监听另一个java对象的方法调用或属性改变,当监听到事件发生后,监听器的某个方法立即执,相关接口[EVENT/LISTENER] 

    平时做开发的时候,我们是写监听器去监听其他对象,那么我们如果想设计一个对象,让这个对象可以被别的对象监听又该怎么做呢? 
    按照严格的事件处理模型来设计一个对象,这个对象就可以被别的对象监听,事件处理模型涉及到三个组件:事件源、事件对象、事件监听器。 

一般程序监听: 
public class Person {      //引用监听      private PersonListener listener;      public void eat() {          if (listener != null) {              //没有监听怎么办?创建event实例              listener.doeat(new Event(this));          }      }      public void run() {          if (listener != null) {              listener.dorun(new Event(this));          }      }      //注册监听,创建实例      public void registerListener(PersonListener listener) {          this.listener = listener;      }  }


interface PersonListener {      void doeat(Event e);      void dorun(Event e);  }


class Event {     private Person source;     public Event() {          }     public Event(Person source) {         this.source = source;     }     public Person getSource() {         return source;     }     public void setSource(Person source) {         this.source = source;     } }


如何调用呢?? 
    public static void main(String[] args) {         Person p = new Person();            //第一步必须先注册监听         p.registerListener(new PersonListener() {            //event还没有实例化             public void doeat(Event e) {                 Person p = e.getSource();                 System.out.println(p + "在吃东西");             }             public void dorun(Event e) {                 Person p = e.getSource();                 System.out.println(p + "在跑步");             }         });         //创建event实例,并绑定事件源         p.eat();         p.run();     }


 JavaWeb中的监听器是Servlet规范中定义的一种特殊类,它用于监听web应用程序中的ServletContext, HttpSession和 ServletRequest等域对象的创建与销毁事件,以及监听这些域对象中的属性发生修改的事件。 
在web.xml中注册监听: 
<listener>   
       <listener-class>listener.MyServletContextListener </listener-class>   
</listener> 

<listener> 
       <listener-class>listener.MyHttpSessionListener</listener-class> 
</listener> 
  
<session-config> 
      <session-timeout></session-timeout> 
</session-config> 

<listener> 
       <listener-class>listener.MyServletRequestListener</listener-class> 
</listener> 


一、ServletContext域对象的创建和销毁 
    ServletContext对应于一个tomcat应用,实现了ServletContextListener接口的类都可以对ServletContext对象的创建和销毁进行监听。 
public class MyServletContextListener implements ServletContextListener {     @Override     //当ServletContext对象被创建时,激发contextInitialized (ServletContextEvent sce)方法。     public void contextInitialized(ServletContextEvent sce) {         System.out.println("ServletContext对象创建");     }     @Override     //当ServletContext对象被销毁时,激发contextDestroyed(ServletContextEvent sce)方法。     public void contextDestroyed(ServletContextEvent sce) {         System.out.println("ServletContext对象销毁");

    tomcat监听对于定时任务,项目启动关闭、日志记录等 

二、监听HttpSession域对象的创建和销毁 
    HttpSessionListener 接口用于监听HttpSession对象的创建和销毁 
public class MyHttpSessionListener implements HttpSessionListener {     @Override     public void sessionCreated(HttpSessionEvent se) {         System.out.println( se.getSession() + "创建了!!");     }      @Override     public void sessionDestroyed(HttpSessionEvent se) {         System.out.println("session销毁了!!");     } }

    对于session的监听,一般用于用户登陆,用户在线,用户操作权限验证,用户登出的监听,非常有用。 

三、监听ServletRequest域对象的创建和销毁 
    ServletRequestListener接口用于监听ServletRequest 对象的创建和销毁 
 public class MyServletRequestListener implements ServletRequestListener {     @Override     public void requestDestroyed(ServletRequestEvent sre) {         System.out.println(sre.getServletRequest() + "销毁了!!");              }     @Override     public void requestInitialized(ServletRequestEvent sre) {         System.out.println(sre.getServletRequest() + "创建了!!");     } }

     request监听对于用户请求权限,用户是否在线进行验证,在实际开发中非常有用。 
     用户每一次访问都会创建request对象,当访问结束后,request对象就会销毁。而MyServletRequestListener 对每个request的创建和销毁都进行了监听。
0 0
原创粉丝点击