【Spring笔记】Servlet规范ServletContainerInitializer

1 介绍

       严格讲ServletContainerInitializer(javax.servlet.ServletContainerInitializer)不是Spring的扩展点,而是web容器(jetty、tomcat)的扩展点,Springboot是基于这个扩展点来实现Servlet启动的。

      ServletContainerInitializer从Serlet3.0开始支持,它是web容器在启动阶段提供给组件(这里将脱离于web容器的第三方框架统称组件,如Spring框架)的一个Hook点,组件可以在这里做初始化的工作(注册servlet、filter、listener)。借助ServletContainerInitializer web应用可以无xml(当然还有别的机制实现无xml,例如注解@WebServlet也可以注册servlet)。

      组件如何使用ServletContainerInitializer?Servlet3.0规范要求组件必须在其jar包的META-INF/services目录中创建一个叫做 javax.servlet.ServletContainerInitializer 的文件,文件中指定ServletContainerInitializer的实现类。那么web容器在启动时就会通过jar services API发现并加载,调用其onStartup方法(如何调用?可以赏析jetty源码)。

      说到ServletContainerInitializer,不得不说注解@HandlesTypes(javax.servlet.annotation.HandlesTypes)。ServletContainerInitializer.onStartup方法的第一个参数“Set<Class<?>> c”就是来自于@HandlesTypes。@HandlesTypes指定一些类(可以是注解类),所有继承/实现或被注解的类拼成一个Set传给ServletContainerInitia

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值