写一款 Tomcat 也没有那么难

Posted Java面试那些事儿

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了写一款 Tomcat 也没有那么难相关的知识,希望对你有一定的参考价值。

前几天写了一篇关于阅读源码话题的文章《》,有同学给我留言说,希望提供一款迷你版的 Tomcat 给他作为学习参考,这不,我在网上找了一篇写得不错的文章。


原文如下:


Tomcat,这只3脚猫,大学的时候就认识了,直到现在工作中,也常会和它打交道。这是一只神奇的猫,今天让我来抽象你,实现你!


Tomcat 是非常流行的 Web Server,它还是一个满足 Servlet 规范的容器。那么想一想,Tomcat 和我们的 Web 应用是什么关系?


从感性上来说,我们一般需要把 Web 应用打成 WAR 包部署到 Tomcat 中,在我们的 Web 应用中,我们要指明 URL 被哪个类的哪个方法所处理「不论是原始的 Servlet 开发,还是现在流行的 Spring MVC 都必须指明」。


由于我们的 Web 应用是运行在 Tomcat 中,那么显然,请求必定是先到达Tomcat 的。Tomcat 对于请求实际上会进行如下的处理。


  • 提供 Socket 服务


Tomcat 的启动,必然是 Socket 服务,只不过它支持 HTTP 协议而已!


这里其实可以扩展思考下,Tomcat 既然是基于 Socket,那么是基于BIO or NIO or AIO 呢?


  • 进行请求的分发


要知道一个 Tomcat 可以为多个 Web 应用提供服务,那么很显然,Tomcat 可以把 URL 下发到不同的Web应用。


  • 需要把请求和响应封装成 request / response


我们在 Web 应用这一层,可从来没有封装过 request/response 的,我们都是直接使用的,这就是因为 Tomcat 已经为你做好了!


话不多说,先来看一眼工程截图。


写一款 Tomcat 也没有那么难



一、封装请求对象


写一款 Tomcat 也没有那么难


这里,你可以清楚的看到,我们通过输入流,对 HTTP 协议进行解析,拿到了 HTTP 请求头的方法以及 URL。


二、封装响应对象


写一款 Tomcat 也没有那么难


基于HTTP协议的格式进行输出写入。


三、Servlet 请求处理基类


写一款 Tomcat 也没有那么难


前文说Tomcat是满足Servlet规范的容器,那么自然Tomcat需要提供API。这里你看到了Servlet常见的doGet/doPost/service方法。


四、Servlet 实现类


写一款 Tomcat 也没有那么难

写一款 Tomcat 也没有那么难


提供这2个具体的Servlet实现,只是为了后续的测试!


五、Servlet 配置


写一款 Tomcat 也没有那么难

写一款 Tomcat 也没有那么难


你应该有些感觉了吧?


我们在servlet开发中,会在 web.xml 中通过 <servlet></servlet> 和 <servlet-mapping></servlet-mapping> 来进行指定哪个 URL 交给哪个 servlet 进行处理。


六、启动类


写一款 Tomcat 也没有那么难

写一款 Tomcat 也没有那么难

写一款 Tomcat 也没有那么难


这里,你能够看到 Tomcat 的处理流程,即把 URL 对应处理的 Servlet 关系形成,解析 HTTP 协议,封装请求/响应对象,利用反射实例化具体的 Servlet 进行处理即可。


七、测试



如果喜欢本文,记得转发给你的朋友,技术的乐趣在于分享而不是独享。

—————END—————

看更多好文

请长按下方图片扫码关注


原文链接:https://www.jianshu.com/p/dce1ee01fb90

以上是关于写一款 Tomcat 也没有那么难的主要内容,如果未能解决你的问题,请参考以下文章

从安装PHP到第一个tomcat执行的hello world其实没那么难

Tomcat源码篇-启动核心流程-没你想的那么难哦

为什么开发一款操作系统就那么难?

小白也能读懂的接口测试,接口测试并没有那么难

不信你看看,MySQL分库分表没有那么难

阿里6面,成功唬住面试官拿了27K,软件测试面试也没有传说中那么难吧....