Spring源码解读:ServletContextListener接口

来源:互联网 发布:公路工程计量软件 编辑:程序博客网 时间:2024/06/05 06:53

ServletContextListener接口的源码

package javax.servlet;import java.util.EventListener;/**  * Implementations of this interface receive notifications about * changes to the servlet context of the web application they are * part of. * To receive notification events, the implementation class * must be configured in the deployment descriptor for the web * application. * @see ServletContextEvent * @sincev 2.3 */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 );/** ** 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 );}

此接口被EventListener标记,用来接收web应用中servlet 上下文变化的通知,同时,为了接收通知事件。该具体实现类必须在web.xml中配置(部署描述符)。

其中设计了两个方法:

//通知web应用的初始化处理开始,所有的ServletContextListeners在filter or servlet在(web应用)初始化之前都会被接收到上下文初始化的信息。

public void contextInitialized ( ServletContextEvent sce );

//在上下文中的销毁中,所有的filter or servlet在销毁之间ServletContextListeners都会被提前通知。

 public void contextDestroyed ( ServletContextEvent sce );

其中的实现类有:


同时该接口引入了ServletContextEvent事件类:

ServletContextEvent:这是关于Web应用程序的servlet上下文更改的通知的事件类。

package javax.servlet;/**  * This is the event class for notifications about changes to * the servlet context of a web application. * @see ServletContextListener * @sincev 2.3 */public class ServletContextEvent extends java.util.EventObject { /** 从给定的上下文中构建一个ServletContextEvent对象 * * @param source - the ServletContext that is sending the event. */    public ServletContextEvent(ServletContext source) {super(source);    }    /** * 返回一个Servlet上下对象 * * @return the ServletContext that sent the event. */    public ServletContext getServletContext () { return (ServletContext) super.getSource();    }    }
其中有EventObject和ServletContext。

对于EventObject没啥特别的就是jdk工具类提供的一个事件对象,获取对象只能通过getSource返回一个Object。

ServletContextEvent也使用相同的手段,只能通过传入一个ServletContext构建一个对象,并返回ServletContext。

package java.util;/** * <p> * The root class from which all event state objects shall be derived. * <p> * All Events are constructed with a reference to the object, the "source", * that is logically deemed to be the object upon which the Event in question * initially occurred upon. * * @since JDK1.1 */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 + "]";    }}
对于ServletContext只是定义了一系列Servlet与Servlet容器通信的方法,例如获取一个文件的MIME的类型,分配一个请求或者写日志文件。

在java虚拟机中一个应用只有一个上下文ServletContext




0 0