tomcat (SCI)ServletContainerInitializer 的加载原理

问题:使用WebScoket的时候发现通过@ServerEndpoint方式注册上去的url无法访问,报错404

经过排查发现在WsServerContainer这个类中的addEndpoint方法一直没有触发ServerEndpoint注解的扫描

通过该方法来源于StandardContext.startInternal()方法的调用如下图:

根据上图可以发现所用来的扫描的pojo来源于 initializers 这个属性,向上追溯确定了该属性的数据来源于ContextConfig的 initializerClassMap 属性

在ContextConfig当中有一个processServletContainerInitializers方法,当中会取loda META-INF/services/ 目录下所有的javax.servlet.ServletContainerInitializer实现,存入initializerClassMap 当中。

解析来会解析所有的HandlesTypes 条目,并且会判断改sic是否存在Handles,如果存在则会修改属性,以方便后面的呢解析

最后在ContextConfig当中会通过checkHandlesTypes方法来检测被该注解配置的类,然后全部扫描到initializerClassMap当中

相关推荐
guoruijun_2012_42 分钟前
fastadmin多个表crud连表操作步骤
android·java·开发语言
Hello-Brand13 分钟前
Java核心知识体系10-线程管理
java·高并发·多线程·并发·多线程模型·线程管理
乐悠小码19 分钟前
数据结构------队列(Java语言描述)
java·开发语言·数据结构·链表·队列
史努比.21 分钟前
Pod控制器
java·开发语言
2的n次方_23 分钟前
二维费用背包问题
java·算法·动态规划
皮皮林55123 分钟前
警惕!List.of() vs Arrays.asList():这些隐藏差异可能让你的代码崩溃!
java
莳光.24 分钟前
122、java的LambdaQueryWapper的条件拼接实现数据sql中and (column1 =1 or column1 is null)
java·mybatis
程序猿麦小七29 分钟前
基于springboot的景区网页设计与实现
java·spring boot·后端·旅游·景区
weisian15135 分钟前
认证鉴权框架SpringSecurity-2--重点组件和过滤器链篇
java·安全
蓝田~37 分钟前
SpringBoot-自定义注解,拦截器
java·spring boot·后端