目录
整体架构
我们想要了解一个框架,首先要了解它是干什么的,Tomcat我们都知道,是用于处理连接过来的Socket请求的。那么Tomcat就会有两个功能:
-
- 对外处理连接,将收到的字节流转化为自己想要的Request和Response对象
- 对内处理Servlet,将对应的Request请求分发到相应的Servlet中
那么我们整体的骨架就出来了,Tomcat其实就分为两大部分,一部分是连接器(Connnector)处理对外连接和容器(Container)管理对内的Servelet。
大体的关系图如下:
描述:
最外层的大框就是代表一个Tomcat服务,一个Tomcat服务可以对应多个Service。每个Service都有连接器和容器。
这些对应的关系我们也可以打开在Tomcat目录配置文件中 server.xml中看出来。
<Server port="8006" shutdown="SHUTDOWN">
<Service name ="Catalina">
<Connector port ="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443"/>
<Connector port="8010" protocol="AJP/1.3" redirectPort="8443"/>
<Engine name="Catalina" defaultHost="localhost">
<Realm className="org.apache.catalina.realm.LockOutRealm">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/>
</Realm>
<Host name="localhost" appBase="webapps"></Host>
</Engine>
</Service>
</Server>
Tomcat各个组件对应的实现类
更多
Tomcat整体启动流程
蓝线部分是各个组件的初始化,在Catalina对象中创建了server.xml的解析器,一步到位创建出大部分的组件
红线部分是责任链模式的启动流程
绿线部分是热加载和热部署的过程(war包的解压和web.xml的解析,解析出listener filter servlet等)