架构
- Server
- 服务器,只有一个
- 对应一个Tomcat实例
- 可通过8005监听并关闭
- Service
- 服务,把连接器和容器组装在一起,可有多个
- 实现通过不同端口号访问同一台机器上部署的不同应用
- Connector(Coyote)
- 连接器,负责对外交流,可有多个
- 将客户端请求连接到Tomcat
- 与Container之间通过标准的ServletRequest和ServletResponse通信
- 功能
- EndPoint:网络I/O通信,实现TCP/IP协议,提供字节流给Processor
- Processor:应用层协议解析,实现HTTP,提供Tomcat Request对象给Adapter
- Adapter:Request/Response与ServletRequest/ServletResponse转化,提供ServletRequest 对象给容器
- Container(Catalina)
- Tomcat核心,Servlet容器,负责内部处理
- Engine:引擎(默认为Catalina),只有一个
- Host:虚拟机,基于域名分发请求,可有多个
- Context:服务器,隔离各个WEB应用,可有多个,每个Context的ClassLoader都是独立的(jar包独立)
- Wrapper:包装组件,一个Wrapper封装一个Servlet
- Component
- 组件
- Manager(管理器)
- logger(日志管理)
- loader(载入器)
- pipeline(管道)
- valve(管道中的阀)
套娃式架构优点
- 组件关系清晰,便于后期组件生命周期的管理
- 和配置文件server.xml中标签的包含方式对应,后续解读及封装对象过程中容易对应
- 便于子容器继承父容器配置
支持
- I/O模型
- NIO:非阻塞I/O
- NIO2:异步I/O
- APR:Apache可移植运行库,用于并发调优
- 应用层协议
- HTTP/1.1
- AJP:用于和Web服务器(Apache)集成,Apache处理动态资源,Tomcat处理静态资源
启动
- 复制war包至webapp目录
- 执行startup.bat脚本启动
- 启动过程中war包会被自动解压装载
启动参数
- 组件实例化
- 统一对象声明周期,抽象出了LifeCycle生命周期接口
- 入口
- startup.sh --> catalina.sh start --> java xxxx.jar org.apache.catalina.startup.Bootstrap(main) start
- 启动流程分析
- catalinaDaemon = catalina 对象
工作原理
- 多个Connector和一个Engine组成一个服务
- 一个Container可对应多个Connector
- Servlet=server+applet
- applet:客户端应用程序,用鼠标就可操作
- Servlet:服务端应用程序,通过网络请求操作
- Servlet接口(规范)
- service()
目录结构
- /bin:存放 Windows 或 Linux 平台上启动和关闭 Tomcat 的脚本文件
- /conf:存放 Tomcat 的各种全局配置文件,其中最重要的是 server.xml
- /lib:存放 Tomcat 以及所有 Web 应用都可以访问的 JAR 文件
- /logs:存放 Tomcat 执行时产生的日志文件
- /work:存放 JSP 编译后产生的 Class 文件
- /webapps:Tomcat 的 Web 应用目录,默认情况下把 Web 应用放在这个目录下
源码剖析
- 原则
- 定焦原则:抓主线(抓一个核心流程去分析,不要漫无目的的去看源码)
- 宏观原则:站在上帝视角,先脉络后枝叶(切忌视图搞清楚看到的每一行代码,源码考虑因素多,不看辅助功能不影响主线)
- 方法技巧
- 断点(观察调用栈)
- 反调(右键,Find Usages)
- 经验(如doXX(),service()实现业务逻辑)
- 见名思意(通过方法名称联想到方法作用)
- 多动手
参考
四张图带你了解Tomcat系统架构
https://blog.csdn.net/qq_38245537/article/details/79009448
web容器,servlet容器,spring容器,springmvc容器的联系
https://blog.csdn.net/qq_31772441/article/details/104163457
Tomcat系列(4)——Tomcat 组件及架构详细部分
https://www.cnblogs.com/haimishasha/p/10740606.html
tomcat7完整的源码及依赖包下载(即编即用)
http://www.xwood.net/_site_domain_/_root/5870/5930/5932/t_c258846.html
IDEA搭建Tomcat源码环境
https://blog.csdn.net/qq_45859054/article/details/104726732
tomcat -ROOT 与webapps 的关系