• tomcat的事件监听


    //事件涉及的三个组件:事件源、事件对象、事件监听器

    //一个总的事件监听器接口,所有不同分类的事件监听器都继承这个接口

    public interface EventListener {
    }

    //例如 ServletContextListener 这个ServletContext监听器  他有两个方法,一个是初始化方法,另一个是销毁的方法。在web.xml中配置了listener,那么容器在启动时就会扫描web.xml的listener的配置,自动调用contextInitialized 方法,在容器重启时,他会先调用contextDestroyed销毁的方法,在调用contextInitialized 创建的方法。在容器关闭时,会调用contextDestroyed方法。但我刚启动完容器,立刻关闭,是不会调用到contextDestroyed方法的。我想他这里应该有设置时间的吧。

    public interface ServletContextListener extends EventListener {
        /**
         ** Notification that the web application initialization
         ** process is starting.
         ** All ServletContextListeners are notified of context
         ** initialization before any filter or servlet in the web
         ** application is initialized.
         */
    
        public void contextInitialized ( ServletContextEvent sce );  //接受的参数是ServletContextEvent 事件源
    /** ** Notification that the servlet context is about to be shut down. ** All servlets and filters have been destroy()ed before any ** ServletContextListeners are notified of context ** destruction. */ 

      public void contextDestroyed ( ServletContextEvent sce ); }

    //每一个事件对象都有一个总的事件对象类,下面这个就是了。

    public class EventObject implements java.io.Serializable {
        private static final long serialVersionUID = 5516075349620653480L;
    
        /**
         * The object on which the Event initially occurred.
         */
        protected transient Object  source;
    
        /**
         * Constructs a prototypical Event.
         *
         * @param    source    The object on which the Event initially occurred.
         * @exception  IllegalArgumentException  if source is null.
         */
        public EventObject(Object source) {
            if (source == null)
                throw new IllegalArgumentException("null source");
         //在这里封装一个事件源
            this.source = source;
        }
    
        /**
         * The object on which the Event initially occurred.
         *
         * @return   The object on which the Event initially occurred.
         */
        public Object getSource() {
            return source; //得到事件源
        }
    
        /**
         * Returns a String representation of this EventObject.
         *
         * @return  A a String representation of this EventObject.
         */
        public String toString() {
            return getClass().getName() + "[source=" + source + "]";
        }
    }
    public class ServletContextEvent extends java.util.EventObject { 
    
        /** Construct a ServletContextEvent from the given context.
         *
         * @param source - the ServletContext that is sending the event.
         */
        public ServletContextEvent(ServletContext source) {
        super(source);
        }
        
        /**
         * Return the ServletContext that changed.
         *
         * @return the ServletContext that sent the event.
         */
        public ServletContext getServletContext () { 
        return (ServletContext) super.getSource();//返回一个真正的事件源
        }
        
    }

    这就是tomcat的事件监听设计模型。

  • 相关阅读:
    图论概况
    [NOI2006]最大获利
    Dining
    [USACO5.3]校园网Network of Schools 缩点
    I Hate It
    [USACO06JAN]牛的舞会The Cow Prom Tarjan
    爱在心中
    [HAOI2006]受欢迎的牛
    泥泞的道路
    上白泽慧音
  • 原文地址:https://www.cnblogs.com/hjy9420/p/4215561.html
Copyright © 2020-2023  润新知