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

相关推荐
xiaowu08012 分钟前
C# 中的Async 和 Await 的用法详解
java·开发语言·c#
范纹杉想快点毕业16 分钟前
初探Qt信号与槽机制
java·c语言·开发语言·c++·qt·visualstudio·visual studio
哈喽姥爷17 分钟前
苍穹外卖--缓存菜品Spring Cache
java·缓存·spring cache·苍穹外卖·黑马
stein_java40 分钟前
springMVC-13 文件下载及上传
java·spring
Cyanto1 小时前
Spring MVC 核心枢纽:DispatcherServlet 的深度解析与实践价值
java·spring·mvc
fuze23331 小时前
Spring MVC扩展消息转换器-->格式化时间信息
java·spring·mvc
躺着高1 小时前
dump 日志收集与分析(jmap 和 jstack 工具)
java
wuxuanok1 小时前
Java反射
java·开发语言·笔记·学习
lifallen1 小时前
Flink task、Operator 和 UDF 之间的关系
java·大数据·flink
面朝大海,春不暖,花不开1 小时前
Spring Data MongoDB 技术指南
java·mongodb·spring