点击上方“芋道源码”,选择“设为星标”

管她前浪,还是后浪?

能浪的浪,才是好浪!

每天 8:55 更新文章,每天掉亿点点头发...

源码精品专栏

  • 原创 | Java 2020 超神之路,很肝~

  • 中文详细注释的开源项目

  • RPC 框架 Dubbo 源码解析

  • 网络应用框架 Netty 源码解析

  • 消息中间件 RocketMQ 源码解析

  • 数据库中间件 Sharding-JDBC 和 MyCAT 源码解析

  • 作业调度中间件 Elastic-Job 源码解析

  • 分布式事务中间件 TCC-Transaction 源码解析

  • Eureka 和 Hystrix 源码解析

  • Java 并发源码

来源:jianshu.com/p/dce1ee01fb90

  • 前言

  • Write MyTomcat

    • 2.1 MyRequest

    • 2.2 MyResponse

    • 2.3 MyServlet

    • 2.4 ServletMapping 和 ServletMappingConfig

    • 2.5 MyTomcat

    • 2.6 Test MyTomcat


前言

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

Tomcat

Write MyTomcat

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已经为你做好了!

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

工程结构

2.1 MyRequest

封装请求对象

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

2.2 MyResponse

封装响应对象

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

2.3 MyServlet

提供Servlet

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

FindGirlServlet和HelloWorldServlet

FindGirlServlet

HelloWorldServlet

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

2.4 ServletMapping 和 ServletMappingConfig

servlet配置

servlet配置

你应该有些感觉了吧?

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

2.5 MyTomcat

端口

start 方法

start

dispatch

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

2.6 Test MyTomcat

running!

Ok,MyTomcat is so urgly,but i like it!

good night!



欢迎加入我的知识星球,一起探讨架构,交流源码。加入方式,长按下方二维码噢

已在知识星球更新源码解析如下:

最近更新《芋道 SpringBoot 2.X 入门》系列,已经 20 余篇,覆盖了 MyBatis、Redis、MongoDB、ES、分库分表、读写分离、SpringMVC、Webflux、权限、WebSocket、Dubbo、RabbitMQ、RocketMQ、Kafka、性能测试等等内容。

提供近 3W 行代码的 SpringBoot 示例,以及超 4W 行代码的电商微服务项目。

获取方式:点“在看”,关注公众号并回复 666 领取,更多内容陆续奉上。

文章有帮助的话,在看,转发吧。
谢谢支持哟 (*^__^*)

手写一个迷你版的 Tomcat 猫相关推荐

  1. 手写一个迷你版的 Tomcat 喵【转】

    原文地址:https://blog.csdn.net/FYGu18/article/details/82921115 前言 Tomcat,这只3脚猫,大学的时候就认识了,直到现在工作中,也常会和它打交 ...

  2. 极光im java_java手写一个迷你版的Tomcat代码分享

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

  3. 手写一个迷你版的 Tomcat 喵

    前言 Write MyTomcat 2.1 MyRequest 2.2 MyResponse 2.3 MyServlet 2.4 ServletMapping 和 ServletMappingConf ...

  4. 从零开始写一个迷你版的Tomcat

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源 | www.jianshu.com/p/dce1ee01fb ...

  5. 如何手写一个迷你版的RPC

    点击上方"Java后端技术栈"关注 持续推送技术干货 前言 在实际后台服务开发中,比如订单服务(开发者A负责)需要调用商品服务(开发者B负责),那么开发者B会和A约定调用API,以 ...

  6. 手写一个迷你版Spring MVC框架

    前期准备 我这里要写的是一个迷你版的Spring MVC,我将在一个干净的web工程开始开发,不引入Spring,完全通过JDK来实现. 我们先来看一眼工程: 工程代码结构 第一:在annotatio ...

  7. 【手写系列】写一个迷你版的Tomcat

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

  8. 用 java 写一个迷你版的 Tomcat

    点击"终码一生",关注,置顶公众号 每日技术干货,第一时间送达! 1.前言 Tomcat,这只3脚猫,大学的时候就认识了,直到现在工作中,也常会和它打交道.这是一只神奇的猫,今天让 ...

  9. 写一个迷你版Smarty模板引擎,对认识模板引擎原理非常好(附代码)

    前些时间在看创智博客韩顺平的Smarty模板引擎教程,再结合自己跟李炎恢第二季开发中CMS系统写的tpl模板引擎.今天就写一个迷你版的Smarty引擎,虽然说我并没有深入分析过Smarty的源码,但是 ...

最新文章

  1. 异常处理器详解 Java多线程异常处理机制 多线程中篇(四)
  2. 独家 | 如何创建用于离线估算业务指标的测试集?(附代码链接)
  3. 把C++类成员方法直接作为线程回调函数
  4. 【JavaSE_06】Java中的数组(array)-思维导图
  5. 安卓逆向_7 --- 六种快速定位关键 Smali 代码的方法 ( 去掉 RE 广告 )
  6. 建立丰富多彩的toast的简单实例
  7. java中函数_java中的函数
  8. 2198元买真全面屏手机!网友:笑而不语...
  9. qt撤销与回退_Git撤销某次分支的合并Merge
  10. SSH终端仿真器:ZOC 8 for Mac
  11. docker--强制删除none的image镜像
  12. mysql提高运行效率_提升Mysql执行效率的SQL优化技巧汇总
  13. python入门基础语法答案_第一阶段:Python开发基础 Python基础语法入门  day03 课后作业...
  14. 用 C 语言编写一个网络蜘蛛来搜索网上出现的电子邮件地址
  15. 智慧环卫系统建设方案(智能垃圾分类收运管理)
  16. 用SPSS做正态分布检验
  17. ICEM 网格划分技巧(21-5)
  18. Java Json格式化工具
  19. html utf 8编码转换器,utf8和gb2312编码在线转换工具
  20. 利用Jenkins pipeline配置测试工具

热门文章

  1. 工业虚拟现实解决方案
  2. php使用addons,think addons教程
  3. Docker 容器退出状态码existed
  4. Python声音处理入门
  5. 微信小程序商城购物车页 二维数组怎么做
  6. 云计算未来的发展前景和就业前景怎么样?
  7. Android平台交叉编译流程
  8. 2022年武汉市工业产品绿色设计示范企业申报条件流程
  9. Linux 文件系统(2)sda sdb 和 SATA IDE SCSI
  10. 准静态、静态、动态(动力学分析)