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

相关推荐
一 乐9 分钟前
人事管理系统|基于Springboot+vue的企业人力资源管理系统设计与实现(源码+数据库+文档)
java·前端·javascript·数据库·vue.js·spring boot·后端
带刺的坐椅11 分钟前
Solon AI 开发学习19 - 结合 Solon Flow 实现 ReAct 效果
java·ai·chatgpt·llm·openai·solon·deepseek
CoderYanger15 分钟前
Java SE——12.异常(≠错误)《干货笔记》
java·开发语言
Data_agent24 分钟前
1688获得1688店铺所有商品API,python请求示例
java·开发语言·python
why15131 分钟前
面经整理——算法
java·数据结构·算法
越来越无动于衷34 分钟前
Java 实现 WebService(SOAP)联网调用:从原理到实战
java·开发语言
静水楼台x35 分钟前
Java之String系列--intern方法的作用及原理
java·spring
专注于大数据技术栈36 分钟前
java学习--枚举(Enum)
java·学习
愤怒的代码37 分钟前
Java 面试 100 题深度解析 · 专栏总览与大纲
java·面试
银迢迢40 分钟前
idea控制台中文乱码采用好几种方法一直解决不了
java·ide·intellij-idea