从 0 开始手写一个Tomcat,7 步搞定!

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

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


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


由于我们的 Web 应用是运行在 Tomcat 中,那么显然,请求必定是先到达Tomcat 的。Tomcat 对于请求实际上会进行如下的处理。了解 Tomcat 建议大家看下这篇文章《Tomcat 的 Server 文件配置详解!》。


第一,提供 Socket 服务


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


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


第二,进行请求的分发


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


第三,需要把请求和响应封装成 request / response


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


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

image.png

image.png

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

二、封装响应对象

image.png

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

三、Servlet 请求处理基类

image.png

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

image.png

image.png

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

五、Servlet 配置

image.png

image.png

你应该有些感觉了吧?


我们在servlet开发中,会在 web.xml 中通过 和 来进行指定哪个 URL 交给哪个 servlet 进行处理。了解 Tomcat 建议大家看下这篇文章《Tomcat 的 Server 文件配置详解!》。在Java技术栈微信公众号回复:tomcat,即可获取更多tomcat教程。


六、启动类

image.png

image.png

image.png

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

七、测试

image.png

实现一个简易版的 Tomcat 就这么 7 大步搞定,大家都来动手实现一下吧,代码最好不要复制,自己动手一个个敲,这样实现之后,对 Tomcat 就没那么陌生了。

目录
相关文章
|
前端开发 Java 应用服务中间件
手写一个迷你版的 Tomcat 猫
前言 Tomcat,这只3脚猫,大学的时候就认识了,直到现在工作中,也常会和它打交道。这是一只神奇的猫,今天让我来抽象你,实现你!
手写一个迷你版的 Tomcat 猫
|
前端开发 Java 应用服务中间件
从0开始手写一个Tomcat,7步搞定!
从0开始手写一个Tomcat,7步搞定!
256 0
从0开始手写一个Tomcat,7步搞定!
|
Java 应用服务中间件 容器
|
移动开发 应用服务中间件 容器
手写一个简化版Tomcat
Tomcat作为Web服务器深受市场欢迎,有必要对其进行深入的研究。那么Tomcat是如何工作的?
2724 0
|
Java 应用服务中间件 关系型数据库
Java 手写Tomcat
1). 创建Java项目Tomcat 2). 创建Servlet接口 public interface IServlet { public void service(); } 3).
937 0
|
Web App开发 应用服务中间件 Windows
手写 tomcat (nio)
手写 tomcat (nio)   下载 :demo     测试:          项目结构:        public class NIOSocketServerForTomcat { private String host = "127.
894 0
|
3月前
|
缓存 Java 应用服务中间件
Spring Boot配置优化:Tomcat+数据库+缓存+日志,全场景教程
本文详解Spring Boot十大核心配置优化技巧,涵盖Tomcat连接池、数据库连接池、Jackson时区、日志管理、缓存策略、异步线程池等关键配置,结合代码示例与通俗解释,助你轻松掌握高并发场景下的性能调优方法,适用于实际项目落地。
628 5
|
6月前
|
Java 应用服务中间件 Linux
在Java 12环境中配置和部署Apache Tomcat的步骤。
这段部署Tomcat的冒险旅程充满技术挑战,但同时也像游戏一样充满乐趣。它需要你提前准备,仔细执行,并随时准备解决意外情况。成功后,你就可以在这匹强壮的网络野马上,带着你的Java应用,冲向Web开发的璀璨星空。
226 56
|
9月前
|
网络协议 Java 应用服务中间件
框架源码私享笔记(01)Tomcat核心架构功能 | 配置详解
本文首先分享了《活出意义来》一书序言中的感悟,强调成功如同幸福,不是刻意追求就能得到,而是全心投入时的副产品。接着探讨了Tomcat的核心功能与架构解析,包括网络连接器(Connector)和Servlet容器(Container),并介绍了其处理HTTP请求的工作流程。文章还详细解释了Tomcat的server.xml配置文件,涵盖了从顶级容器Server到子组件Connector、Engine、Host、Context等的配置参数及作用,帮助读者理解Tomcat的内部机制和配置方法。
|
7月前
|
Java 应用服务中间件 Maven
在IntelliJ IDEA中如何配置使用Maven以创建Tomcat环境
所以,别担心这些工具看起来有些吓人,实际上这些都是为了帮助你更好的完成工作的工具,就像超市里的各种烹饪工具一样,尽管它们看起来可能很复杂,但只要你学会用,它们会为你烹饪出一道道美妙的食物。这就是学习新技能的乐趣,让我们一起享受这个过程,攀登知识的高峰!
485 27