springboot web - 启动(4) tomcat(springboot框架工作原理及流程)

网友投稿 272 2022-06-21


接第二篇

第二篇里面, 看到容器创建的是 AnnotationConfigServletWebServerApplicationContext 类型.

一 .类图

二. 构造

构造函数中, 创建了三个类, 并赋值给相应的属性.

三. 启动 tomcat

这里我主要是想要了解tomcat启动, 所以一些方法, 就先不看.

1. onRefresh()

onRefresh() 方法执行的是 ServletWebServerApplicationContext 的方法.

createWebServer() 方法中, 会创建 Tomcat 类.

getWebServer方法里面, 就创建了 Tomcat 类, 并对其进行一些配置操作.

这里的 protocol 是有一个默认值的:

public static final String DEFAULT_PROTOCOL = "org.apache.coyote.http11.Http11NioProtocol";

private String protocol = DEFAULT_PROTOCOL;

可以看到, 这里默认使用的是 同步非阻塞io协议. 需要注意的是, 在 new Connector() 的时候 对 Http11NioProtocol 进行了反射实例化.

public Http11NioProtocol() {

super(new NioEndpoint());

}

在实例化的时候, new 了一个 NioEndpoint. 这个东西很重要, 后面会看到.

getTomcatWebServer()

protected TomcatWebServer getTomcatWebServer(Tomcat tomcat) {

return new TomcatWebServer(tomcat, getPort() >= 0);

}

在创建 TomcatWebServer 的时候, 就会启动 Tomcat

2. finishRefresh()

ServletWebServerApplicationContext 重写了该方法.

startWebServer()

addPreviouslyRemovedConnectors()

service 在绑定 Connector 的时候, 会启动 Connector

看一下 connector.start() 方法.

startInternal() 是一个抽象方法, 其中的一个实现类 Connector

接着进 start() 方法

endPoint.start() 方法:

这个bind() 执行的是NioEndpoint 中的方法, 进行端口绑定监听.

总结:

从执行流程上来看,

1. 在onRefresh() 中, 启动Tomcat

2. 在 finishBeanFactoryInitialization() 中进行了后台方法的路由映射(待续)

3. 在finishRefresh()中进行了端口绑定监听


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:同一服务器下发布两个不同网站(war包)的方法(这里采用的是二级域名的方法
下一篇:springboot web - 建立路由(springboot自动配置的原理)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~