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当中

相关推荐
小刘在重生~几秒前
Java常用类|String类详解 + BigDecimal精准计算(含面试题)
java·开发语言·python
随遇而安zx3 分钟前
【多线程】---JMM 与 volatile 深度解析
java·多线程
邪修king30 分钟前
Re:Linux系统篇(十九):进程篇(八): 进程等待详解:wait/waitpid,僵尸进程到底该如何回收
java·开发语言
啵啵啵鱼41 分钟前
DS-顺序表
java·数据结构·笔记·后端·链表·obsidian
TinyMemory1 小时前
Java 面向对象核心入门(七):方法重载 Overload,同一个方法名能干不一样的活
java·面向对象·overload·方法重载
吴声子夜歌1 小时前
Java扩展——OkHttp
java·开发语言·okhttp
卓怡学长1 小时前
w210基于springboot反诈平台设计与实现
java·spring boot·spring·intellij-idea
萧瑟余晖2 小时前
Java深入解析篇六十一之编译器API(javax.tools)详解
java·开发语言
码云数智-园园2 小时前
C++ STL 容器怎么选?vector、list、map、unordered_map 优缺点对比
java·开发语言