《springboot源码系列》——内置tomcat启动原理
tomcat作为一个web容器,启动后可以监听指定端口号、接收http请求,然后对请求进行封装后转发到servlet代码中。一般mvc框架都会把请求自动映射到我们的controller上去。那么在springboot中、它是如何自动实现的呢。
获取Autoconfiguration
springboot项目默认开启了 @EnableAutoConfiguration 注解,里面 import 了 AutoConfigurationImportSelector 类,他会找到需要满足规范需要自动装配jar的所有AutoConfiguration配置。比如我这个项目引入的mybatis、redis,以及内置的 tomcat 等。
构建WebServerFactory
ServletWebServerFactoryAutoConfiguration 这个配置类就负责对webserver容器自动装配,springboot默认的容器是tomcat,所以它这里的webserver就是tomcat了。首先是通过配置文件 定制出了一个 webServerFactory。
创建WebServer
启动的时候,ServletWebServerApplicationContext 的 createWebServer 方法就是基于 tomcat 原生的api组装出一个webserver,然后调用 this.tomcat.start(); 启动容器,用来接收http请求。
注册DispatcherServlet
我们在使用springmvc的时候,所有的请求是交给 DispatcherServlet 处理的,我们会在web.xml配置需要被拦截的url。那么在 springboot 中肯定也有一个 DispatcherServletAutoConfiguration 的。这里首先就创建了一个 DispatcherServlet 的 Bean, 它是直接映射到 根路径。
然后紧接着,就把 注册到了tomcat中,这样tomcat就能接收我们的请求了。