ServletContainerInitializer源码翻译与理解

来源:互联网 发布:vpn软件排行 编辑:程序博客网 时间:2024/06/04 18:56
package javax.servlet;import java.util.Set;/** * 目的:Servlet容器初始化(ServletContainerInitializer初始化器) *  * <p>web容器启动时,调用该接口的实现(初始化器), * 初始化已被注册的servlets、filters、listeners。 *  * <p>{@link javax.servlet.annotation.HandlesTypes HandlesTypes}注解 * 来实现该接口,注解的类作为onStartup()方法的参数传入。 *  * <p>没有@HandlesTypes注解或没有指定应用程序类匹配的注解时,容器{@link #onStartup}必须是个null集合 *  * <p>实现该接口就必须在对应的jar包的META-INF/services * 目录创建一个名为javax.servlet.ServletContainerInitializer的文件, * 该文件内容指定该接口的具体实现类,那么,当web容器启动时就会运行这个初始化器做一些组件内的初始化工作。 *  * 实现机制: * Tomcat容器的ServletContainerInitializer机制的实现,主要交由Context容器 * 和ContextConfig监听器共同实现,ContextConfig监听器负责在容器启动时读取每个web * 应用的WEB-INF/lib目录下包含的jar包的META-INF/services/javax.servlet. * ServletContainerInitializer,以及web根目录下的META-INF/services/ * javax.servlet.ServletContainerInitializer,通过反射完成这些 * ServletContainerInitializer的实例化,然后再设置到Context容器中,最后 * Context容器启动时就会分别调用每个ServletContainerInitializer的onStartup方法, * 并将感兴趣的类作为参数传入。 * 参考资料:http://blog.csdn.net/wangyangzhizhou/article/details/52013779 * * @author TCM * @create 2017年10月24日上午9:55:01 * @see javax.servlet.annotation.HandlesTypes * @since Servlet 3.0 */public interface ServletContainerInitializer {    /**     * 启动ServletContainerInitializer具体实例后,并设置到ServletContext中     * @param c 实现该接口的具体实现类     * @param ctx ServletContext     * @throws ServletException if an error has occurred     */    public void onStartup(Set<Class<?>> c, ServletContext ctx)        throws ServletException; }