Tomcat架构解析 基于Tomcat 8.5.x全面介绍了Tomcat的架构、各组件的实现方案以及使用方式,主要包括Tomcat的基础组件架构以及工作原理,Tomcat各组件的实现方案,小编为大家准备了tomcat架构解析文档pdf,有需要的就快来下载吧
书籍部分内容预览
Tomcat组件架构设计1)server
服务器可以描述为这样一个应用:接收客户端发来的请求数据并进行解析,完成相关业务处理,然后把处理结果作为相应返回给客户端。
通常我们可以使用serversocket监听指定端口来实现该功能
2)Connection和Container(Engine)
当我们将请求监听和请求处理放在一起的时候扩展性就很差。比如当我们想适配多种网络协议,但是请求处理却相同的时候。
处理方案就是:将网络协议和请求处理从概念上分开。Connection负责开启socket并监听客户端请求、返回响应数据;Container(Engine)负责具体的请求处理。
3)Service
上述方案的缺陷就是无法很好的判断Connection由哪个Container(Engine)来处理。
采用service方案,一个server包含多个service(它们相互独立),一个service包含多个Connection和一个Container,这样,connection的请求只能由该container来处理
由于Container表示一个更加通用的概念,为了与Tomcat组件命名一致,将Container重新命名为Engine,用于表示整个servlet引擎
4)Context
上述解决了网络协议和容器的解耦。下面我们需要在Engine中支持管理web应用。当接收到Connection请求时,能够找到一个合适的Web应用来处理。Context就代表一个Web应用
5)Host
为了提供对多个域名的服务,我们可以将每个域名视为一个虚拟的主机。在每个Host下包含多个Context
6)Wrapper
在一个Web应用中,可以包含多个servlet实例来处理不同链接的请求。因此,需要一个组件概念来表示Servlet定义,在Tomcat中servlet定义被称为Wrapper
7)Container
容器代表一类组件,这类组件的作用就是接收客户端请求并返回响应数据,具体操作委派到子组件完成。
Engine、Host、Context、Wrapper均继承自Container
8)LifeCycle
所有的组件均存在启动、停止等生命周期方法,拥有生命周期管理的特性,我们将这个抽取出来作为接口LifeCycle,定义生命周期管理的核心方法。
9)Executor
tomcat的并发,提供了Executor接口来表示一个可以在组件间共享的线程池。该接口同样继承LifeCycle接口
共享范围:Executor由Service维护,因此同一个Service中的组件可以共享一个线程池
10)Bootstrap和Catalina
Catalina提供一个shell程序,用于解析service.xml创建各个组件。同时负责启动、停止应用服务器
Bootstrap作为应用服务器启动入口。Bootstrap负责创建Catalina,根据执行参数调用Catalina相关方方法完成对应用服务器的操作
作者简介 刘光瑞
窝客网研发总监,负责窝客产品研发管理及总体架构设计。拥有十几年的企业级大型业务系统研发架构经验,成功带领团队设计并研发基于Tomcat的组件化微服务架构。
2007年在四达软件担任高级架构师,主导了数个省份的广播电视省网业务运营支撑系统的架构设计及优化工作。2012年在电讯盈科担任高级技术顾问,参与了中国移动供应链系统的架构及研发。在应用系统架构及性能优化方面积累了丰富的经验。
目录 第1章 Tomcat介绍 1
1.1 简介 1
1.1.1 Tomcat历史 1
1.1.2 Tomcat许可 2
1.2 安装和启动 3
1.2.1 Tomcat下载与安装 3
1.2.2 Tomcat启动 4
1.2.3 IDE启动 5
1.2.4 嵌入式启动 10
1.2.5 Debug启动 11
1.3 Tomcat目录结构 12
1.4 Tomcat 8.5之后的新特性 12
1.5 小结 13
第2章 Tomcat总体架构 14
2.1 总体设计 14
2.1.1 Server 14
2.1.2 Connector和Container 15
2.1.3 Container设计 17
2.1.4 Lifecycle 20
2.1.5 Pipeline和Valve 23
2.1.6 Connector设计 24
2.1.7 Executor 26
2.1.8 Bootstrap和Catalina 28
2.2 Tomcat启动 30
2.3 请求处理 31
2.4 类加载器 33
2.4.1 J2SE标准类加载器 33
2.4.2 Tomcat加载器 34
2.4.3 Web应用类加载器 36
2.5 小结 37
第3章 Catalina 38
3.1 什么是Catalina 38
3.2 Digester 39
3.2.1 对象栈 40
3.2.2 匹配模式 41
3.2.3 处理规则 41
3.2.4 示例程序 42
3.3 创建Server 44
3.3.1 Server的解析 45
3.3.2 Engine的解析 48
3.3.3 Host的解析 49
3.3.4 Context的解析 50
3.4 Web应用加载 53
3.4.1 StandardHost 54
3.4.2 HostConfig 56
3.4.3 StandardContext 60
3.4.4 ContextConfig 64
3.4.5 StandardWrapper 69
3.4.6 Context命名规则 69
3.5 Web请求处理 71
3.5.1 总体过程 71
3.5.2 请求映射 72
3.5.3 Catalina请求处理 80
3.6 DefaultServlet和JspServlet 81
3.6.1 DefaultServlet 82
3.6.2 JspServlet 84
3.7 小结 85
第4章 Coyote 86
4.1 什么是Coyote 86
4.2 Web请求处理 88
4.2.1 主要概念 88
4.2.2 请求处理 90
4.2.3 协议升级 92
4.3 HTTP 94
4.3.1 基础知识 94
4.3.2 配置方式 95
4.4 AJP 97
4.4.1 基础知识 97
4.4.2 Web服务器组件 103
4.4.3 配置方式 106
4.5 HTTP/2.0 106
4.5.1 基础知识 106
4.5.2 配置方式 110
4.6 I/O 111
4.6.1 BIO 112
4.6.2 NIO 115
4.6.3 NIO2 121
4.6.4 APR 130
4.7 小结 134
第5章 Jasper 136
5.1 Jasper简介 136
5.2 JSP编译方式 137
5.2.1 运行时编译 137
5.2.2 预编译 141
5.3 JSP编译原理 144
5.4 小结 151
第6章 Tomcat配置管理 152
6.1 JVM配置 152
6.1.1 JVM配置选项 152
6.1.2 系统属性 153
6.2 服务器配置 158
6.2.1 catalina.properties 158
6.2.2 server.xml 159
6.2.3 context.xml 172
6.3 Web应用配置 172
6.3.1 ServletContext初始化参数 173
6.3.2 会话配置 174
6.3.3 Servlet声明及映射 175
6.3.4 应用生命周期监听器 177
6.3.5 Filter定义及映射 177
6.3.6 MIME类型映射 178
6.3.7 欢迎文件列表 178
6.3.8 错误页面 179
6.3.9 本地化及编码映射 179
6.3.10 安全配置 179
6.3.11 JNDI配置 180
6.3.12 其他 183
6.4 Web应用过滤器 185
6.4.1 CorsFilter 186
6.4.2 CsrfPreventionFilter 188
6.4.3 ExpiresFilter 188
6.4.4 FailedRequestFilter 190
6.4.5 RemoteAddrFilter 191
6.4.6 RemoteHostFilter 191
6.4.7 RemoteIpFilter 192
6.4.8 RequestDumperFilter 195
6.4.9 SetCharacterEncodingFilter 195
6.4.10 WebdavFixFilter 196
6.5 Tomcat管理 196
6.5.1 host-manager 196
6.5.2 manager 197
6.5.3 管理命令行 199
6.5.4 Ant任务 200
6.5.5 JMX 201
6.6 小结 201
第7章 Web服务器集成 202
7.1 Web服务器与应用服务器的区别 202
7.2 集成应用场景 205
7.3 与Apache HTTP Server集成 206
7.3.1 Windows环境安装 206
7.3.2 Linux环境安装 207
7.3.3 mod_jk 209
7.3.4 mod_proxy_ajp 229
7.4 与Ngnix集成 235
7.4.1 Ngnix简介 235
7.4.2 Windows环境安装 237
7.4.3 Linux环境安装 237
7.4.4 Tomcat集成 241
7.5 与IIS集成 243
7.6 小结 243
第8章 Tomcat集群 244
8.1 Tomcat集群介绍 244
8.1.1 Tomcat集群基础 246
8.1.2 Apache Tribes 247
8.1.3 Tomcat集群组件实现 253
8.2 集群配置 254
8.3 会话同步 255
8.3.1 DeltaManager 256
8.3.2 BackupManager 257
8.3.3 替代方案 257
8.4 集群部署 258
8.4.1 实现原理 258
8.4.2 配置方式 259
8.5 小结 259
第9章 Tomcat安全 260
9.1 配置安全 260
9.1.1 安装部署问题 260
9.1.2 server.xml配置 261
9.2 应用安全 263
9.2.1 Realm 264
9.2.2 HttpServletRequest 265
9.2.3 Authenticator 266
9.3 传输安全(SSL) 267
9.4 Java安全策略 273
9.4.1 简介 273
9.4.2 catalina.policy 275
9.5 小结 279
第10章 Tomcat性能调优 280
10.1 Tomcat性能测试及诊断 281
10.1.1 常见测试方式 281
10.1.2 性能测试工具 282
10.1.3 数据采集及分析 290
10.2 Tomcat性能优化 303
10.2.1 JVM优化 304
10.2.2 Tomcat配置 308
10.3 应用性能优化建议 311
10.4 小结 312
第11章 Tomcat附加功能 313
11.1 Tomcat的嵌入式启动 313
11.1.1 为什么需要嵌入式启动 313
11.1.2 嵌入式启动Tomcat 314
11.1.3 嵌入式启动服务器 316
11.2 Tomcat中的JNDI 317
11.2.1 什么是JNDI 317
11.2.2 Tomcat中的JNDI 318
11.3 Comet和WebSocket 320
11.3.1 什么是Comet 321
11.3.2 Tomcat的Comet实现 322
11.3.3 什么是WebSocket 326
11.3.4 Tomcat的WebSocket实现 328
11.4 小结 335
附录 server.xml配置 336
结束语 370