具体描述
本书全面介绍了Tomcat的架构、各组件的实现方案以及使用方式。包括Tomcat的基础组件架构以及工作原理,Tomcat各组件的实现方案、使用方式以及详细配置说明,Tomcat与Web服务器集成以及性能优化,Tomcat部分扩展特性介绍等。读者可以了解应用服务器的架构以及工作原理,学习Tomcat的使用、优化以及详细配置。
作者简介
刘光瑞
窝客网研发总监,负责窝客产品研发管理及总体架构设计。拥有十几年的企业级大型业务系统研发架构经验,成功带领团队设计并研发基于Tomcat的组件化微服务架构。2007年在四达软件担任高级架构师,主导了数个省份的广播电视省网业务运营支撑系统的架构设计及优化工作。2012年在电讯盈科担任高级技术顾问,参与了中国移动供应链系统的架构及研发。在应用系统架构及性能优化方面积累了丰富的经验。
目录信息
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
· · · · · · (收起)
读后感
用户评价
坦白说,我抱着一种试试看的心态拿起了这本《设计模式:可复用面向对象软件的基础》,毕竟市面上关于设计模式的书籍多如牛毛,大多只是对GoF那23种模式的机械罗列和生硬套用。然而,这本著作的开篇就展现了其非凡之处。它没有急于介绍具体的模式,而是先花了很大篇幅去探讨“为什么我们需要模式”,将软件设计中反复出现的问题和复杂度摆在了我们面前,让读者先感受到“痛点”,然后再顺理成堂地引出模式作为解决方案。作者在描述每一种模式时,不仅仅给出了 UML 图和代码骨架,更重要的是,他剖析了这种模式背后的设计哲学和权衡取舍——即它解决了什么问题,又可能引入了哪些新的复杂性。这种辩证的、不盲目推崇的写作态度,让我觉得非常踏实。我特别喜欢它对于“场景化应用”的讲解,它没有将模式孤立起来,而是将它们置于一个完整的、演进中的软件项目中,展示了如何根据业务需求的变化,灵活地选择、组合和退化设计模式。这比我以往阅读的任何一本模式书都要来得深刻和实用,它教的不是死记硬背,而是思考的框架。
这本书的封面设计真是让人眼前一亮,那种深邃的蓝色调,加上烫金的字体,立刻就给人一种专业、严谨的感觉。我本来对技术书籍的审美期待不高,总觉得它们是功能性的,但《深入理解计算机系统》这本书完全打破了我的固有印象。内容上,它并没有像很多教材那样堆砌晦涩难懂的公式和定义,而是通过非常生动的案例和清晰的脉络,将计算机系统的各个层面,从硬件底层到操作系统、网络协议,层层剥开,如同解剖一个精密的机械装置。作者的行文风格非常独特,既有学术的严谨性,又不失工程师的实践精神。尤其是在讲解虚拟内存和并发编程那几个章节时,那种抽丝剥茧的论述方式,让我这个在编程边缘徘徊多年的“老手”都感到豁然开朗。它不是简单地告诉你“是什么”,而是深入挖掘“为什么是这样”,这种对底层原理的尊重和探究,是阅读体验中最令人着迷的部分。读完之后,感觉自己对代码运行的场所,那个无形的“黑箱”有了更清晰的认知,这对于提升代码质量和调试效率是质的飞跃。
阅读《Effective C++》(我姑且用这个代称)的过程,与其说是在学习 C++ 的新特性,不如说是一场与资深 C++ 专家的深度对话。这本书的叙事结构非常精妙,它不是按主题或字母顺序排列,而是以一系列“条款”的形式呈现,每一个条款都像是一个经验总结出来的黄金法则。这些法则往往都非常具体、可操作性极强,比如关于构造函数、析构函数、拷贝控制的那些陷阱,都是无数次项目踩坑后提炼出来的精华。最让我受益匪浅的是它对“资源获取即初始化 (RAII)”思想的反复强调和多角度阐释。作者的语气带着一种过来人的那种语重心长,他会告诉你,为什么 C++ 的设计哲学要求你必须在特定的情境下做出特定的选择,以及如果不这样做,可能会在程序运行的某个不经意的角落里埋下内存泄漏或未定义行为的定时炸弹。这本书的阅读体验是渐进式的,初读时可能觉得有些晦涩,但每当你在实际项目中遇到一个棘手的内存问题或者模板编译错误时,回头翻阅相关的条款,那种“啊哈!”的顿悟感是无与伦比的。
《人月神话》这本书给我的震撼是跨越了技术领域的,它更像是一本关于项目管理、团队协作和软件工程哲学的高级读物。读完它,你会意识到,软件开发中最难的部分从来都不是算法的复杂度或编译器的限制,而是“人”的复杂性、沟通的成本和进度的不确定性。作者以一种近乎寓言的方式,讲述了大型项目管理中那些看似反直觉却又屡试不爽的规律,比如“向一个延期的项目增加人手,只会让它更延期”。这种对“人月度量衡”的深刻反思,彻底颠覆了我过去那种线性思考项目进度的习惯。他提出的“没有银弹”的观点,至今仍是业界人士的座右铭。这本书的魅力在于它的永恒性,虽然它写于几十年前,但书中描述的那些关于沟通开销、概念完整性、以及如何设计良好接口的重要性,在今天的微服务和敏捷开发中依然是核心挑战。它教会我,在编写每一行代码之前,首先要思考的是团队的结构、产品的愿景以及如何有效管理预期的偏差。这本书是每一个想成为高级工程师或项目领导者的人的必修课。
我过去一直觉得《重构:改善既有代码的设计》这本书可能更适合那些刚毕业的初级工程师,认为它主要解决的是代码丑陋、结构混乱的问题。然而,当我真正沉下心来阅读时,才发现自己大大低估了它的价值。这本书的核心不在于那些具体的“坏味道”和对应的“重构手法”的列表,而在于它构建了一种全新的代码维护心智模型。作者强调,重构不是一个孤立的动作,而是开发过程中的常态,是与编写新功能、修复 Bug 同样重要的活动。他通过大量的“Before”和“After”的实例,细致入微地展示了如何在一张布满灰尘的旧地图上,小心翼翼地拓宽道路,同时确保交通不中断。我印象最深的是关于“提取方法”和“用函数式表达”的那几章,它教你如何将那些纠缠不清的逻辑流,通过重构逐步提炼成清晰的意图表达,让代码不仅仅是给机器执行的指令,更是人类可以高效阅读的文档。这本书的价值在于,它将“清理技术债务”这件事,从一个令人头疼的负担,转化成了一种富有成就感的工程实践。
这书写的让人以为是翻译的一样
架构解析,硬生生写成了一本tomcat入门,大量的可选参数列表,并且还没有任何个人的的看法,几乎是官方的翻译。特别是第10章,看完大家知道怎么调优么?感觉很多内容还没网上写的深入。书名改成TOMCAT使用入门好了。
这书写的让人以为是翻译的一样
和深入剖析tomcat很搭配
本书对于 Tomcat 框架的把握还是可以的。不过组件讲得太复杂,不符合正常人习惯的思维方式。另一方面,对于 Tomcat 组价的理解不到位,特别是谈及线程池,有不少错误。