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

相关推荐
鸽鸽程序猿29 分钟前
【JavaEE】【SpringCloud】环境与工程搭建
java·spring cloud·java-ee
我居然是兔子7 小时前
异常练习:在试错中吃透Java异常处理的底层逻辑
java·开发语言
CC.GG8 小时前
【C++】STL容器----unordered_map和unordered_set的使用
java·数据库·c++
Overt0p8 小时前
抽奖系统(4)
java·spring boot·tomcat
想做后端的小C9 小时前
Java:接口回调
java·开发语言·接口回调
爱学习的小可爱卢10 小时前
JavaEE进阶——Spring核心设计模式深度剖析
java·spring·设计模式
毕设源码-钟学长10 小时前
【开题答辩全过程】以 个性化电影推荐网站的设计与实现为例,包含答辩的问题和答案
java·spring boot
C++业余爱好者10 小时前
Power Job 快速搭建 及通信机制介绍
java
用户61354114601611 小时前
Tomcat Connectors 1.2.32 源码编译安装教程(含 mod_jk 配置步骤)
tomcat
qq_27049009611 小时前
SpringBoot药品管理系统设计实现
java·spring boot·后端