Spring源码解读:ServletContextListener接口

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
	 * @since	v 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
	 * @since	v 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




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值