tomcat8启动流程
首先需要将源码导入idea中,找到核心启动类:Bootstrap
大致流程:
Java中应用采用main函数运行
Tomcat启动的时候
1、Init初始化我们的tomcat需要组件(Connector、Service、Container、Wrapper)空对象.
2、Load加载我们的conf/server. xml到程序中
3、Start启动我们tomcat可能初始化我们的servlet类
4、Stop销毁操作,
启动分析
1、tomcat 本身是Java语言编写的应用程序,再启动的时候入口类为 Bootstrap main函数。
2、执行到Bootstrap main函数中的init方法。
使用Java反射技术实例化我们的Catalina (Catalina实际上就是一个包装类,包装了所有的 tomcat核心组件:Connector、Service、Container、Wrapper)
3、根据命令执行到Bootstrap main 函数中的 load 方法,再使用Java 的反射机制执行Catalina的 load方法。
4、Catalina的 load 方法解析 conf/server.xml配置文件,并且读取到程序中,并且初始化 server
解析配置文件,将server.xml里面的内容读取到程序中。
5、调用LifecycleBase类的init方法初始化server,
tomcat采用责任链模式初始化其他组件,server初始化之后,开始初始化 service
依次往下初始化组件
Server.
–Service运行存在多个负责我们tomcat业务逻辑操作
----Connector连接器(主要负责监听我们的客户端请求和封装请求和响应)
------Containet(容器)tutooneeese5wetesscsoeaerees
---------host.
------------context.
----------------Wrapper.
6、在ContextConfig 中的 webConfig方法中解析项目的 web.xml 文件,如果有的话,再开始初始化
7、运行tomcat项目时,判断项目中是否有web.xml,检查web.xml servlet配置。如果有的情况下,再开始初始化。
上下文:指的是这个应用程序,这个项目
StandardWrapper指定我们我们的 WrapperServlet_的类
StandardContext我们的上下文运行我们应用程序
Connector连接类:连接器的创建:创建socket连接(有四种通讯协议【推荐使用NIO】,apr是tomcat内部协议,可以用于tomcat内部通讯) ,监听客户端请求,