ServletContainerInitializer注册组件应用

ServletContainerInitializer是Servlet3.0引入的特性,用于插拔式注册组件。Tomcat通过Context容器和ContextConfig监听器来实现这个机制,启动时扫描指定路径下的配置文件,反射创建实例并调用onStartup方法。示例中,配置文件内容应填写实现ServletContainerInitializer接口的类的全路径。
摘要由CSDN通过智能技术生成

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的类的全路径

本例值为:

com.chi.MyservletContainerInitilizer

该类中的结构如下

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

 

 

 

 

 

 

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值