舒服!这把可以说是,直接把Tomcat一撸到底了。
你好呀,我是歪歪。
Tomcat 作为一款历史悠久的开源软件,很多朋友可能大学的时候就认识它了,工作中和它打交道的人也不少,甚至可以说是使用最广泛的 Web 应用服务器。
这样一个成熟的工具,我们还有必要深入学习它吗?如果手写一个 Tomcat,我们又有什么收获呢?
很多人觉得日常工作中我会用就行了,刚开始的时候确实没问题,不过如果仅仅停留在会用,那么你离掌握这门技术就还远,遇到复杂问题的时候也就不知道从哪儿下手去解决了。
Tomcat 处理一个 HTTP 请求的完整流程
用的时候它确实很简单,说白了就是一个 Socket Server,但是对应到工程上却并不容易。如果这个服务器只需要响应一次请求,确实是没有什么可做的,但是现实世界并不是这样,我们还要考虑一些啰嗦事:
如何管理多个 Servlet? 如何支持多个独立的应用? 大量用户请求的性能问题如何解决?
Tomcat 作为一款实用的 Servlet 应用服务器,考虑到这些事项,内部的程序结构会变得很复杂。这些在我们学习了 Tomcat 的源码后,会有很多的启发。
另一方面,近几年各种应用数不胜数,各种语言和工具也频繁迭代,我们作为专业程序员,深入底层,理解中间层是很必要的。
对这些基础服务的理解,能让我们以不变应万变,把握住技术快速流变中相对稳定的内核。理解了底层运行原理,知道了所以然,工作中可以更加高效准确地使用中间件提供的服务,提高应用程序的质量。长期来讲,让我们的事业更成功。
跳出功利心,我们从更高的角度来看。作为一个专业人士,能将自己的专业从头到尾融会贯通,这种收获感,也是对自己定下志向一生选择这个专业的一个交代。而作为个人,对这个世界的某个方面有了一个透彻的理解,会感到不虚此生之行,更是一种深层的幸福。
那么,如何高效地掌握 Tomcat?
当然可以,如果我们只是实现一个「微型」的 Tomcat 框架的话,还是可以搞定的。
我们写 MiniTomcat 的目标是掌握 Tomcat,所以我们不会自己创新什么,而是老老实实按照 Tomcat 的样子模仿着手写。因此我们的目录结构、包名、类名、接口名、继承体系、类中的主要方法名都是参照 Tomcat 本身的。
在这里,我推荐一张「中国 Java 研发工程师鼻祖」之一郭屹梳理的「手写 MiniTomcat 体系图」,内容自于他的《手把手带你写一个 MiniTomcat》专栏,建议先码后看。
关于作者 - 郭屹
作为一个 30 年技术老兵,他可以称为中国 Java 研发工程师鼻祖之一:曾在 Sun Microsystems 公司 Java 研发中心担任 J2EE 研发工程师,同时他也是 JDBC Driver、Minis 开发者,Norming 软件国际的 CTO。
当我知道他推出手写 Tomcat 专栏时,非常惊喜,一上线我就订阅了。
总的来说,他从 Web 应用服务器讲起,深入 Servlet 原理,攻克 Web 开发核心技术,解密 Tomcat 的设计思路与内部结构,跟着学下来,只用 6 周,就可以搭建一实用的 Tomcat 框架。
今天早鸟特惠,一顿饭钱就可以拿下,推荐你学一下:
手写 MiniTomcat 是如何设计的?
第一章 实现一个简单的 Web 应用服务器
第二章 实现专业的 Connector
这一部分的改造过后,MiniTomcat 的连接层就有模有样了。
第四章 完成 MiniTomcat 及扩展讨论
作为扩展,课程会探讨如何把 MiniSpring 打包放在 MiniTomcat 中运行,形成 Mini 系列的核心环境,还将探讨将网络 IO 扩展为支持 NIO,以支持高并发场景的方案。
通过目录来看看具体内容吧:
我们在工作中,总是有前辈谆谆教导不要重新造轮子。这句话是对的,对于要快速搭建交付给客户的项目来讲,尽量采用第三方来搭建项目是明智的选择。然而选择就意味着取舍,不重新造轮子,失去的就是对软件基础的透彻理解,技术流于表面,软件工程师变成了码农。为了弄清楚软件系统如何运行起来的,成为专家,我们必须学会重新造轮子。