在路上

2006年的暑假,抱着早点接触社会的心态,从合肥坐24小时绿皮车跑到广州打暑假工。当时感触到:学电气自动化的似乎天天要和那些油乎乎的机械打交道;哪一天如果自己想干点什么,初期投入买个设备都要很多钱。 广州回来后,一天下午我在家里菜园马路边的草丛中捡了一部摩托罗拉手机。手机里面的游戏启动屏是冒着热气的茶杯,还有着JAVA4个字母,第一眼就甚是喜欢那个图案——与君初相识,犹如故人归。

2007年,一次在同学的宿舍里发现一本封面带有Java字样的书,煞有一种“这妹妹我曾见过”的感觉。后来问单片机老师:从事软件好,还是硬件好。老师推荐走软件路线。也这就这样,我选择了偏软件,选择了似有一见钟情的Java切入。 那会觉得Java比C有意思多了:C天天只会在DOS下面打印输出,一点也没Java可以用Swing做个贪吃蛇、做个象棋好玩。

2008年,正式工作,尤其是用Java找到的饭碗,甭说多爱死Java了!从我当年注册CSDN的ID可见LoveJavaYDJ。如今看,觉得多俗气O(∩_∩)O哈!

2009年,工作以来,一直默默用Java使用着Tomcat做着Web开发,慢慢慢慢觉得好无趣:天天就是Action -> Service -> Dao流水线式业务开发。一时以为Java只能做做Web开发,还觉得学Java没出息。还是C或C++牛掰,你看我们Java程序员整天 用着他们用C或C++写的Tomcat~

2010年,偶尔一次在网上发现《How tomcat works》这本英文电子书,当时还没中文版实物书卖。我靠,原来Tomcat是用Java写的!原来是自己的无知,是自己的功力太浅!然后就满血复活般地啃噬一把。

2013年,我参考Tomcat体系结构,使用Netty开发搭建了公司使用的PushServer推送服务器。算是个人开发的第一个纯Java而非Web的中间件~当时还挺有成就感。

在公司面试中,遇到培训速成出来或工作2/3年的对Servlet规范、HTTP协议、HTTP请求过程这些基础几乎都不了解;也遇到过不乏有很多使用Java五六年以上的同学,在谈及很熟悉Tomcat时,往往也只是停留在基本配置,调调内存参数上面。 加之,QQ群或社区中也经常有同学问如何学习设计模式,如何看源码(其实,我在学校时也问过老师,上班后也请教过老大)。我想到了自己学习看的《How tomcat works》,所以整理推荐给大家(推荐看原版)。 Tomcat中有不少设计模式值得借鉴学习,如门面、观察者。还比如,作为Servlet程序员都知道Filter,但我们知道Filter在Tomcat的哪一环节出现当然更好了。

那,Tomcat4/5版本老吗?是老,但,我不觉得这会影响我们学习、演练。因为我们应该先从大处着手——先学习方法。再者,Tomcat大的体系架构基本没变,如共有4种容器:Engine(引擎)、Host(主机)、Context(上下文)和 Wrapper(包装器)。 后面版本更多是优化如NIO、线程池,以及遵循新的HTTP协议和Servlet规范。

我觉得:写代码,犹如我们学习写文章一样,想写出好的文章,那就得先学习、分析已经存在的好文章——先积累输入再会有良好地输出。共勉!

本书简介

本书以Tomcat4和5为基础,从最基本的HTTP请求和一个最简单的web服务器例子开始,循序渐进,分解介绍Tomcat中各个容器和组件 如Engine、Host、Context和Wrapper。另,还详细介绍了如何管理Session,以及如何在分布式环境下扩展Session;Tomcat如何处理配制文件server.xml, 以及又是如何通过Digester库将XML元素转换Java对象;如何通过使用"关闭钩子"Runtime.getRuntime().addShutdownHook()优雅地停止服务器。层层深入直至使用JMX技术管理Tomcat中的应用程序。

  • 第1~2章,首先对HTTP协议和Socket通讯以及Servlet规范做了介绍,然后编写演示了一简单的Servlet容器。
  • 第3~4章,改进前章节中的Demo,详细介绍了Tomcat中默认连接器(Connector)的实现,讲解了如何创建请求链接,以及Tomcat中如何解析请求,如HTTP请求头Header、Cookie等。
  • 第5章,系统介绍了容器(Container),容器是一用来处理servlet请求并填充返回对象给web客户端的模块。共有4种容器:引擎(Engine), 主机(Host), 上下文(Context),包装器(Wrapper)。本章先介绍了Context和Wrapper。
  • 第6~10章,介绍了Tomcat中五个重要模块组件:生命周期管理、日志系统、类加载机制、会话管理、安全控制。
  • 第11~13章,依次详细介绍了Tomcat中核心容器标准实现:Wrapper、Context、Host、Engine。
  • 第14章,介绍了容器之上的另两个重要的管理组件Server和Service,展示了如何配置多个连接器(Connector),如何优雅地启动和停止Servlet容器。
  • 第15章,展示了Tomcat中如何借助Digester避免硬编码,使其可灵活配置。
  • 第16~17章,讲解Tomcat的启动和关闭机制,介绍了Shell和Bat脚本。
  • 第18章,讲解了Tomcat中负责部署和装载WEB应用的Deployer组件。
  • 第19~20章,分别介绍了通过ContainerServlet接口和JMX技术如何控制管理部署在Tomcat中的应用。

每一章配有相关内容的Demo代码,这既是对理论内容的具体展现,也是帮助大家更好地理解,并可以逐步动手实现自己的Java Web服务器。

阅读建议

首先,大家对Java基础应该有所掌握,如Thread、Socket、I/O。

大家在阅读时,应着重把握Tomcat作者的设计思想,在此基础上,再针对具体问题进行深入地学习和研究。

带着好奇心,边读书,边看源码(尤其对比Tomcat最新代码。对比新旧代码,可见其更替优化的场景和过程),更应该亲手画相应的UML图和流程图。 我整理的代码和UML图。最好Debug一遍每章示例Demo——实践出真知。

最后,进行知识关联梳理和整理,比如:Tomcat中用到了哪些设计模式?Tomcat中的管道(pipeline)和阀门(valve)和Servlet中的Filter以及Springmvc中拦截器对比,等等。

勘误&支持

由于能力有限,虽然找了些朋友帮忙校队,但书中难免会出现一些错误,也请读者朋友批评指正。大家可以留言反馈错误和建议,我会积极提供解答。

另,也欢迎加我个人QQ:369415359,进行技术&产品&管理切磋交流。

进步始于交流,收获源于分享

电子书

转载于:https://my.oschina.net/AresYi/blog/967847

《深入剖析Tomcat》序言相关推荐

  1. 一文了解四种软件架构:Serverless架构、微服务架构、分布式架构、单体架构

    如果一个软件开发人员,不了解软件架构的演进,会制约技术的选型和开发人员的生存.晋升空间.这里我列举了目前主要的四种软件架构以及他们的优缺点,希望能够帮助软件开发人员拓展知识面. 一.单体架构 单体架构 ...

  2. 何为 Serverless 架构模式?这 5 大场景来告诉你!

    作者 | Hongqi  阿里云高级技术专家 本文整理自阿里云<Serverless 技术公开课> 什么是 Serverless 架构?按照 CNCF 对 Serverless 计算的定义 ...

  3. 我的 Serverless 实战 — Serverless 架构理念 ( 后端服务器发展 | Serverless 与 ServerFul | Serverless 定义 | 架构优缺点 )

    文章目录 一.后端服务器架构发展 二.Serverless 与 ServerFul 三.Serverless 定义 四.Serverless 优缺点 [本文正在参与 "100%有奖 | 我的 ...

  4. 未来我们对微服务和 Serverless 架构有什么期望

    Juan Ignacio Giro | 作者 梁桂钊 | 译者 技术正在以令人难以置信的速度发展,所以在市场上看到新的技术趋势并不新奇.由于微服务的进步,更强大的云计算,以及 Serverless 架 ...

  5. Serverless 架构模式及演进

    作者:西流 编辑&排版:雯燕 Serverless 架构 按照 CNCF 对 Serverless 计算的定义,Serverless 架构应该是采用 FaaS(函数即服务)和 BaaS(后端服 ...

  6. 常见 Serverless 架构模式

    作者 | Hongqi 阿里云高级技术专家 究竟什么是 Serverless 架构? 什么是 Serverless 架构?按照 CNCF 对 Serverless 计算的定义,Serverless 架 ...

  7. Serverless 架构下的服务优雅下线实践

    作者 | 行松 阿里巴巴云原生团队 应用发布.服务升级一直是一个让开发和运维同学既兴奋又担心的事情. 兴奋的是有新功能上线,自己的产品可以对用户提供更多的能力和价值:担心的是上线的过程会不会出现意外情 ...

  8. 从零入门 Serverless | 一文详解 Serverless 架构模式

    作者 | Hongqi  阿里云高级技术专家 本文整理自<Serverless 技术公开课>,关注"Serverless"公众号,回复 入门 ,即可获取 Serverl ...

  9. Serverless 选型:深度解读 Serverless 架构及平台选择

    作者 | 悟鹏  阿里巴巴技术专家 **导读:**本文尝试以日常开发流程为起点,分析开发者在每个阶段要面对的问题,然后组合解决方案,提炼面向 Serverless 的开发模型,并与业界提出的 Serv ...

  10. 盘点 Serverless 架构的六个特质

    作者 | Wisen Tanasa 编译 | 刘雅梦 策划 | 辛晓亮 本文介绍了 Serverless(无服务器)架构的六个特质(Traits):入门门槛低(Low barrier-to-entry ...

最新文章

  1. Docker(十五):Docker实战 使用 docker-compose
  2. Linux系统安全工具之NMAP
  3. 2019 ICPC 南京网络赛 F Greedy Sequence
  4. 数据库平时错误和使用经验的总结
  5. 如何在excel 单元格中增加换行
  6. python笑傲江湖统计字数_Udacity.深度学习.用 Python 统计字数.2017-10-30
  7. Swift代码实现加载WEBVIEW
  8. 如何选择云服务器与轻量应用服务器?谈谈自己的看法
  9. 高中电子技术——指针式万用表调零
  10. slf4j log4j logback关系详解和相关用法
  11. 正则爬取猫眼电影排行榜 待修改版
  12. Go Web编程(Go语言性能好 语法简单 开发效率高 )
  13. 广域网宽带接入技术九ADSL技术
  14. 录音转文字python实现
  15. 概率论与随机过程(分布函数整合)
  16. 利用feather快速处理大数据
  17. Eclipse12:CookieSession
  18. 好用的图片翻译器有哪些?这3个工具你们不能不知道
  19. 工业机器人与视觉实训平台
  20. bzoj2215 POI2011 Conspiracy

热门文章

  1. 基于微信小程序的药店管理系统毕业设计
  2. 正确认识和使用鲁班尺
  3. OpenCV 对比度增强
  4. h5 input 阴影_CSS3文本阴影 text-shadow
  5. 解决ESXi识别加密狗U盾的问题
  6. ffmpeg视频格式转换
  7. jersey 过滤_Jersey 开发RESTful(十五) Jersey的拦截器
  8. Python:Dir及str函数
  9. 20210610 线程数不断飙升问题定位
  10. 新浪十年路 新浪的触角 新浪成年