本书不是鼓励读者去重复发明轮子,而是希望读者能够研究开源软件的架构,学习其优秀的设计理念,知道这些产品的过人之处,从而提升自己的编程素养。
本书特色:
1、基于当前应用广泛稳定的Tomcat 7版本;
2、深入剖析Tomcat的每一个设计要点,使读者知其然,更知其所以然;
3、拒绝没营养的直接贴代码分析,而是升华到对Tomcat设计思想的剖析;
4、通篇采用大量插图来辅助文字解释,降低读者的理解门槛;
5、层次分明,脉络清晰,由浅入深,循序渐进,确保知识讲解的连贯性和普适性。
6、通过本书能快速建立起Tomcat内核模型,对生产故障处理有很大的帮助;
7、本书深入Tomcat分析,融会贯通,进而深入掌握Web服务器技术;
8、学习Tomcat内部精彩的设计模式,无形之中提高读者Java编程水平。
目录
- 第1章 Web服务器机制 1
- 1.1 通信协议 1
- 1.1.1 HTTP/HTTPS 1
- 1.1.2 HTTP请求/响应模型 3
- 1.1.3 解析HTTP报文 4
- 1.2 套接字通信 7
- 1.2.1 单播通信 8
- 1.2.2 组播通信 9
- 1.2.3 广播通信 12
- 1.3 服务器模型 13
- 1.3.1 单线程阻塞I/O模型 14
- 1.3.2 多线程阻塞I/O模型 15
- 1.3.3 单线程非阻塞I/O模型 16
- 1.3.4 多线程非阻塞I/O模型 19
- 第2章 Servlet规范 22
- 2.1 Servlet接口 22
- 2.2 ServletRequest接口 23
- 2.3 ServletContext接口 23
- 2.4 ServletResponse接口 24
- 2.5 Filter接口 24
- 2.6 会话 25
- 2.7 注解 25
- 2.8 可插拔性 26
- 2.9 请求分发器 26
- 2.10 Web应用 26
- 2.11 Servlet映射 27
- 2.12 部署描述文件 28
- 第3章 Tomcat的启动与关闭 29
- 3.1 Tomcat的批处理 29
- 3.1.1 startup.bat 29
- 3.1.2 shutdown.bat 31
- 3.1.3 catalina.bat 31
- 3.1.4 setclasspath.bat 39
- 3.2 Tomcat中的变量及属性 40
- 3.2.1 环境变量 41
- 3.2.2 JVM系统变量 41
- 3.2.3 Tomcat属性 44
- 第4章 从整体预览Tomcat 45
- 4.1 整体结构及组件介绍 45
- 4.2 请求处理的整体过程 50
- 第5章 Server组件与Service组件 52
- 5.1 Server组件 52
- 5.1.1 生命周期监听器 53
- 5.1.2 全局命名资源 57
- 5.1.3 监听SHUTDOWN命令 58
- 5.2 Service组件 59
- 第6章 Connector组件 63
- 6.1 HTTP阻塞模式协议—Http11Protocol 64
- 6.1.1 套接字接收终端—JIoEndpoint 65
- 6.1.2 HTTP阻塞处理器—Http11Processor 73
- 6.2 HTTP非阻塞模式协议—Http11NioProtocol 102
- 6.2.1 非阻塞接收终端—NioEndpoint 102
- 6.2.2 HTTP非阻塞处理器—Http11NioProcessor 111
- 6.3 HTTP APR模式协议—Http11AprProtocol 114
- 6.3.1 APR接收终端—AprEndpoint 114
- 6.3.2 HTTP APR处理器—Http11AprProcessor 119
- 6.4 AJP Connector 121
- 6.4.1 AJP阻塞模式协议—AjpProtocol 123
- 6.4.2 AJP APR模式协议—AjpAprProtocol 125
- 6.5 HTTP三种模式的Connector 126
- 6.6 AJP三种模式的Connector 126
- 第7章 Engine容器 127
- 第8章 Host容器 129
- 8.1 Web应用—Context 129
- 8.2 访问日志—AccessLog 130
- 8.3 管道—Pipeline 130
- 8.4 Host集群—Cluster 130
- 8.5 Host域—Realm 130
- 8.6 生命周期监听器—HostConfig 131
- 8.6.1 Descriptor描述符类型 131
- 8.6.2 WAR包类型 132
- 8.6.3 目录类型 133
- 第9章 Context容器 134
- 9.1 Context容器的配置文件 134
- 9.2 包装器—Wrapper 135
- 9.3 Context域—Realm 135
- 9.4 访问日志—AccessLog 135
- 9.5 错误页面—ErrorPage 135
- 9.6 会话管理器—Manager 137
- 9.7 目录上下文—DirContext 137
- 9.8 安全认证 138
- 9.9 Jar扫描器—JarScanner 138
- 9.10 过滤器 139
- 9.11 命名资源—NamingResource 140
- 9.12 Servlet映射器—Mapper 141
- 9.13 管道—Pipeline 141
- 9.14 Web应用载入器—WebappLoader 142
- 9.15 ServletContext的实现—ApplicationContext 143
- 9.16 实例管理器—InstanceManager 145
- 9.17 ServletContainerInitializer初始化器 145
- 9.18 Context容器的监听器 147
- 9.18.1 ContextConfig监听器 148
- 9.18.2 TldConfig监听器 151
- 9.18.3 NamingContextListener监听器 151
- 9.18.4 MemoryLeakTrackingListener监听器 151
- 第10章 Wrapper容器 154
- 10.1 Servlet工作机制 154
- 10.2 Servlet对象池 156
- 10.3 过滤器链 157
- 10.4 Servlet种类 158
- 10.5 Comet模式的支持 161
- 10.6 WebSocket协议的支持 163
- 10.7 异步Servlet 166
- 第11章 生命周期管理 169
- 11.1 生命周期统一接口—Lifecycle 169
- 11.2 生命周期的状态转化 170
- 11.3 生命周期事件监听机制 172
- 第12章 日志框架及其国际化 177
- 12.1 系统内日志 177
- 12.2 日志的国际化 179
- 12.3 客户端访问日志 181
- 12.3.1 访问日志组件的设计 182
- 12.3.2 访问日志格式的自定义 184
- 第13章 公共与隔离的类加载器 186
- 13.1 类加载器 186
- 13.2 自定义类加载器 189
- 13.3 Tomcat中的类加载器 192
- 13.4 类加载器工厂—ClassLoaderFactory 194
- 13.5 遭遇ClassNotFoundException 196
- 第14章 请求URI映射器Mapper 200
- 14.1 请求的映射模型 200
- 14.2 Mapper的实现 201
- 14.3 局部路由Mapper 203
- 14.4 全局路由Mapper 204
- 第15章 Tomcat的JNDI 205
- 15.1 JNDI简介 205
- 15.2 JNDI运行机制 206
- 15.3 在Tomcat中集成JNDI 210
- 15.4 在Tomcat中使用JNDI 222
- 15.4.1 Web应用的局部配置方式 222
- 15.4.2 服务器的全局配置方式 223
- 15.5 Tomcat的标准资源 226
- 第16章 JSP编译器Jasper 227
- 16.1 从JSP到Servlet 228
- 16.1.1 语法树的生成—语法解析 228
- 16.1.2 语法树的遍历—访问者模式 230
- 16.1.3 JSP编译后的Servlet 232
- 16.2 从Servlet到Class字节码 235
- 16.2.1 JSR45标准 235
- 16.2.2 JDT Compiler编译器 236
- 16.2.3 Jasper自动检测机制 241
- 第17章 运行、通信及访问的安全管理 243
- 17.1 运行安全管理 243
- 17.1.1 Java安全管理器—SecurityManager 243
- 17.1.2 Tomcat的系统安全管理 246
- 17.1.3 安全管理器特权 248
- 17.2 安全的通信 249
- 17.2.1 SSL/TLS协议 249
- 17.2.2 Java安全套接字扩展—JSSE 251
- 17.2.3 Tomcat中SSL安全信道的实现 264
- 17.3 客户端访问认证机制 266
- 17.3.1 Web资源认证原理 266
- 17.3.2 认证模式 267
- 17.3.3 Realm域 272
- 17.3.4 Tomcat如何实现资源安全管理 273
- 17.3.5 如何让你的Web具备权限认证 274
- 第18章 处理请求和响应的管道 276
- 18.1 管道模式—管道与阀门 276
- 18.2 Tomcat中的管道 280
- 18.3 Tomcat中的定制阀门 282
- 第19章 多样化的会话管理器 285
- 19.1 Web容器的会话机制 286
- 19.2 标准会话对象—StandardSession 287
- 19.3 增量会话对象—DeltaSession 288
- 19.4 标准会话管理器—StandardManager 290
- 19.5 持久化会话管理器—PersistentManager 291
- 19.5.1 FileStore 292
- 19.5.2 JDBCStore 293
- 19.6 集群增量会话管理器—DeltaManager 294
- 19.7 集群备份会话管理器—BackupManager 296
- 19.7.1 机制与原理 297
- 19.7.2 高可用性及故障转移机制 299
- 19.7.3 集群RPC通信 301
- 19.8 Tomcat会话管理器的集成 308
- 第20章 高可用的集群实现 311
- 20.1 从单机到集群的会话管理 311
- 20.1.1 单机模式 311
- 20.1.2 集群模式 313
- 20.2 Cluster组件 315
- 20.3 Tomcat的Cluster工作机制 317
- 20.4 Tomcat中Cluster的级别 318
- 20.5 如何让Tomcat实现集群功能 318
- 第21章 集群通信框架 320
- 21.1 Tribes简介 320
- 21.2 集群成员维护服务—MembershipService 321
- 21.3 平行的消息发送通道—ChannelSender 325
- 21.4 消息接收通道—ChannelReceiver 327
- 21.5 通道拦截器—ChannelInterceptor 328
- 21.6 应用层处理入口—MembershipListener与ChannelListener 331
- 21.7 如何使用Tribes进行数据传输 332
- 21.8 Tomcat使用Tribes同步会话 334
- 21.9 Tomcat使用Tribes部署集群应用 334
- 第22章 监控与管理 337
- 22.1 Java管理扩展—JMX 337
- 22.1.1 JMX的基本结构 337
- 22.1.2 JMX例子 338
- 22.2 JMX管理下的Tomcat 339
- 22.3 ManagerServlet 343