参考书:Tomcat内核设计剖析
Server是最顶级的组件,她代表Tomcat的运行实例,在一个JVM中只会包含一个Server。
Service是服务的抽象,它代表请求从接受到处理的所有组件的集合。一个Server中可以有多个Service
Connector是用来接受客户端连接,并接受消息报文,消息报文经由它解析后送往容器中处理。
目前Tomcat包含两种协议的Connector:HTTP,AJP。
Tomcat内部有4个级别的容器,分别是Engine,Host,Context和Wrapper。Wrapper是最小的容器了。
Engine中拥有一下组件
Host容器。
Listener:监听器。
AccessLog:客户端的访问日志。
Cluster:它提供集群功能,可以将Engine容器需要共享的数据同步到集群中的其他Tomcat实例上。
Pipeline:请求处理管道
Realm:提供了Engine容器级别的用户-密码-权限的数据对象,配合资源认证模块的使用。
Host包括的组件与Engine一样
多了个Context容器
Context 包括了
Listener,AccessLog,Pipeline,Realm
Loader:Web应用加载器,用于加载Web应用的资源
Manager: 会话管理器,用于管里对应Web容器的会话。(啥是Web容器的会话?)
NamingResource:命名资源,负责将Tomcat配置文件的server.xml和Web应用的context.xml资源和属性映射到内存中
Mapper:Servlet映射器,它属于Context内部的路由映射器,只负责该Context容器的路由导航
Wrapper容器
一个Wrapper对应一个Servlet。
Wrapper包含一下组件
Servlet组件。
ServletPool:Servlet对象池
Pipeline:请求管道。
————来自网图
这个图假定的是Tomcat使用的阻塞I/O模式接受客户端链接的。
1.客户端发出请求—>
2.Connector的接受器Acceptor接到请求—>
3.交给线程池Executor执行请求响应任务—>
4.Mapper组件根据HTTP协议请求行的URL属性值和请求头部的Host属性值匹配由哪个Host容器,哪个Context容器,哪个Wrapper容器 处理请求。这个过程就是根据请求从Tomcat中找到对应的Servlet,然后由路由的结果封装到Request对象中。—>
5.CoyoteAdaptor组件负责将Connector组件和Engine容器连接起来,把Request对象传入Engine容器中,调用它的管道。—>
6.然后就像洋葱一样,一层一层的拨开他的心。最后传入到了Wrapper容器,执行Wrapper容器对应的Servlet对象的处理方法,对请求进 行逻辑处理,最后返回给客户端。
这篇笔记只是总体地,大概地了解一下Tomcat的结构及处理请求的流程。后续笔记详解各个组件功能。