前言


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

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

工程结构

MyRequest

封装请求对象

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

MyResponse

封装响应对象

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

MyServlet

提供Servlet

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

FindGirlServlet和HelloWorldServlet

FindGirlServlet

HelloWorldServlet

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

ServletMapping和ServletMappingConfig

servlet配置

servlet配置

你应该有些感觉了吧?

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

MyTomcat

端口

start方法

start

dispatch

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

Test MyTomcat

running!

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

good night!

手写系列相关爆文


【手写系列】写出我的第一个框架:迷你版Spring MVC

【手写系列】透彻理解Spring事务设计思想之手写实现

【手写系列】透彻理解MyBatis设计思想之手写实现

【手写系列】纯手写实现一个高可用的RPC

【手写系列】理解数据库连接池底层原理之手写实现

【手写系列】对HashMap的思考及手写实现

【手写系列】纯手写实现JDK动态代理

作者:张丰哲
链接:https://www.jianshu.com/p/dce1ee01fb90
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

【手写系列】写一个迷你版的Tomcat相关推荐

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

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

  2. 手写一个迷你版的 Tomcat 猫

    点击上方"芋道源码",选择"设为星标" 管她前浪,还是后浪? 能浪的浪,才是好浪! 每天 8:55 更新文章,每天掉亿点点头发... 源码精品专栏 原创 | J ...

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

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

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

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

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

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

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

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

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

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

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

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

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

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

最新文章

  1. 剔除Intellij中Mybatis的Mapper自动注入警告
  2. 「BATJ面试系列」并发编程
  3. js生成验证码并验证 .
  4. 常用基础参数SurvivorRatio讲解 || NewRatio讲解 || MaxTenuringThreshold讲解
  5. python tf_TF 2.1.0-rc2发布,2020年停止支持Python 2
  6. SQL之rand,round,floor,ceiling,cast小数处理函数
  7. java 分析java死锁_Java死锁示例–如何分析死锁情况
  8. mybatis 自动填充无效_开发小知识-mybatis-plus自动填充与读写分离
  9. 收到一个机器人txt微盘_经阁-第一章 吞了个机器人-爱阅小说网
  10. (计算机组成原理)第六章总线-第二节:总线仲裁(链式查询,计数器查询、独立请求)
  11. python 直方图每个bin中的值_使用python中的matplotlib进行绘图分析数据
  12. 2015某大型电商集团的前端实习生在线笔试题(无耻的拿来偷看了)
  13. 2022-03-28 术语MES、WMS
  14. 自然数之和(leetcode 167)
  15. 拓端tecdat|R语言混合正态分布极大似然估计和EM算法
  16. 电影院售票系统,电影院订票系统,电影院购票管理系统计算机毕业设计
  17. oracle恢复几天前的数据,恢复oracle数据到以前的某个时间点
  18. matebook13、14 C盘扩展
  19. 微信小程序按钮添加背景
  20. App ios 消息推送

热门文章

  1. python ftp 上传
  2. 流量暴涨擒凶记(转)
  3. XenServer中Windows 7与XP多vCPU支持配置
  4. Pycharm Matplotlib 图像不显示问题
  5. DPM(Deformable Part Model)原理详解
  6. 区块链技术在出版业的三种应用
  7. new/delete和malloc/free的区别(举例说明)(简单点)
  8. Python_二叉树定义与遍历
  9. STM32F030 ADC1的DMA采样问题
  10. 深度学习中,Batch_Normalization加速收敛并提高正确率的内部机制