ServletContainerInitializer注册组件应用

servletcontainerinitializer 是servlet3.0以上版本才有的;

可以用来插拔式注册组件:

原理:

Tomcat容器的ServletContainerInitializer机制的实现,主要交由Context容器和ContextConfig监听器共同实现,ContextConfig监听器负责在容器启动时读取每个web应用的WEB-INF/lib目录下包含的jar包的META-INF/services/javax.servlet.ServletContainerInitializer(依赖的jar包),以及web根目录下的META-INF/services/javax.servlet.ServletContainerInitializer(自己项目的),通过反射完成这些ServletContainerInitializer的实例化,然后再设置到Context容器中,最后Context容器启动时就会分别调用每个ServletContainerInitializer的onStartup方法;

demo:

1,自己项目的话开发中位置不变.且名字不能改.如下红框:

ServletContainerInitializer注册组件应用_第1张图片

然后该文件里的值为.实现ServletContainerInitializer的类的全路径

本例值为:

com.chi.MyservletContainerInitilizer

该类中的结构如下

@HandlesTypes({MyWebApplicationInit.class})
public class MyservletContainerInitilizer implements ServletContainerInitializer {
    @Override
    public void onStartup(Set> set, ServletContext servletContext) throws ServletException {
        System.out.println("xixixixiii");
    }
}
实现类有个onstartup()方法;tomcath会调用该方法.其中set的值为@HandlesTypes({MyWebApplicationInit.class})这个注解里我们自己定义的class类型,这个class类型必须是接口,这样在方法中通过set就可以获取对应的类型对象来完成一定的功能,看业务需求;另一个参数值为servletcontext.可以用它的api注册自定义的filter.listener,servlet等;这样启动Tomcat时就会初始化这些组件;完成注册

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(servlet3.0)