内嵌Tomcat启动流程,,SPI机制
2021-09-17 14:51:06 9 举报
内嵌Tomcat启动流程,,SPI机制
作者其他创作
大纲/内容
wrapper,是对各个servler的包装
tomcat.start
Tomcat.addWebapp--527
getServer(); getConnector(); 上面两个方法没做什么 server.start();
Tomcat.addWebapp--594
5265,启动context的子容器,wrapper,也就是servlet
SpringMvc
监听器ContextConfig
service 服务,一般叫catlina
connector,连接器,监听端口,一般有两个,一个监听请求如8080,一个监听tomcat命令,如8443
请求响应,调用servlet的service方法
5349,完成SPI机制调用ServletContainerInitializer的onstartop方法
1170.将spi加载的ServletContainerInitializer实现类以及相关参数转存到context中,后面有context来触发spi机制的后续功能
监听器ContextConfig加入context容器
在SpringBoot中有用上SpringServletContainerInitializer.java在META-INF/services/services/ServletContainerInitializer中存储下面这个类@HandlesTypes(\"WebApplicationInitializer.class\")class ServletContainerInitializerXXX{}会触发该类的Onstartup方法,传入servletContext以及WebApplication所有的实现类class对象,在onstarup方法中实例化WebApplicationInitializer对象,再调用接口的方法这样既可完成代码配置tomcat
https://cdn.nlark.com/yuque/0/2020/png/1618119/1608441372863-64e385a9-4d32-4490-8e24-bf5117f384f6.png?x-oss-process=image%2Fwatermark%2Ctype_d3F5LW1pY3JvaGVp%2Csize_53%2Ctext_6bKB54-t5a2m6Zmi5Ye65ZOB%2Ccolor_FFFFFF%2Cshadow_50%2Ct_80%2Cg_se%2Cx_10%2Cy_10
.........context.startInternal完成,容器启动完成
Tomcat.addWebapp-
完成一些其他的验证
设置各种参数......5262fireLifecycleEvent()
给容器赋一些必要的值ctx.addLifecycleListener(config);将监听器ContextConfig加入Context容器
内嵌Tomcat启动
1023-ContextConfig.weconfig方法
new Tomcat()tomcat.addWebapptomcat.start
1077-processServletContainerInitializers();加载spi类1080; 处理handlesType注解
完善容器层次模型,方法完成#
Context,真实代表每一个项目。
createContext()创建Context容器,会递归创建server、service、等容器,完成Tomcat容器层次模型
tomcat.addWebapp
Tomcat容器模型各层容器都是LifecyleBase的实现类通过调用LifecyleBase的final修饰的--start方法,再调用各子容器重写的的startInternal方法
StandardContext.startInternal
Engine,引擎,确定请求的所匹配的host以及项目
host,虚拟主机,默认为localhost,
class->反射实例化监听器listener=org.apache.catalina.startup.ContextConfig
0 条评论
下一页