手写一个迷你版的 Tomcat 喵

手写一个Tomcat (参考了公众号:java架构沉思录中的文章:教你写一个迷你版的toncat 原文:https://www.jianshu.com/p/dcelee01fb90) 作为一个java学习的起步者,对tomcat的认识还是有很多的欠缺,在无意中发现了这篇文章,便在自己的环境下尝试搭建,收获良多: 分以下几个步骤: (1)提供Socket服务 (2)进行请求的转发 (3)把请求和响应封装成request/... 阅读详情

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

做积极的人,而不是积极废人!

源码精品专栏

 

来源:http://t.cn/EfQhj2t

  • 前言

  • 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

img

封装响应对象

基于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!



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

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

如果你喜欢这篇文章,喜欢,转发。

生活很美好,明天见(。・ω・。)ノ♡

手写一个简易版的tomcat Tomcat 是一个广泛使用的开源 Servlet 容器,用于运行 Java Web 应用程序。深入理解 Tomcat 的工作原理对于 Java 开发者来说是非常有价值的。本文将带领大家手动实现一个简易版的 Tomcat,通过这个过程,我们可以更清晰地了解 Tomcat 是如何处理 HTTP 请求和响应的。根据以上功能,我们创建如下图所示的包--tomcat类的作用是启动整个tomcat容器--webapp包下存放你自己创建的servlet动态资源。 阅读详情

相关推荐

tomcat到底是啥?手写一个tomcat带你理解它的机制和原理!

手写 minitomcat 目标:可以通过浏览器客户端发送 http 请求,minicat 可以接受请求并进行处理,处理后的结果可以返回给客户端。 接受请求,socket 通信 请求信息封装成 Request 对象,返回的信息封装成 Response 对象 客户端请求资源,分为静态资源和动态资源 资源返回给浏览器 好吧稍微有点标题党,不过对于理解tomcat的原理机制,这样一个mini版的tomcat自己写出来,还是很有帮助的,话不多说,进入正题。 1.0版本 需求:请求 8080 端口,固定返回字符串

不与三的毛竹 1327

手写实现迷你版 Tomcat

  Minicat要做的事情:作为⼀个服务器软件提供服务的,也即我们可以通过浏览器客户端发送http请求,Minicat可以接收到请求进行处理,处理之后的结果可以返回浏览器客户端。 整体思路: (1)提供服务,接收请求(Socket通信) (2)请求信息封装成Request对象(Response对象) (3)客户端请求资源,资源分为静态资源(html)和动态资源(Servlet) (4)资源返回给客户端浏览器 我们递进式完成以上需求,提出V1.0、V2.0、V3.0版本的需求: V1.0需求:浏览器请求h

cyd_0619的博客 1271

AD23导出Gerber文件保姆级教程:从PCB到嘉立创下单,一步不落(附常见问题排查)

本文提供AD23导出Gerber文件的详细教程,涵盖从PCB设计检查到嘉立创下单的全流程,特别针对两层板设计场景,帮助新手工程师避免常见错误。内容包括Gerber文件生成步骤、钻孔文件设置、文件检查工具推荐以及嘉立创下单实操指南,确保PCB打样顺利。

weixin_30924239的博客 440

Tomcat执行流程和核心构成并实现一个迷你版的Tomcat

Tomcat作为一个Http服务器,作用非常之大。本文只要研究Tomcat的执行流程和核心构成,并手动编写一个迷你版的Tomcat。 Tomcat执行流程 当⽤户请求某个URL资源时 1)HTTP服务器会把请求信息使⽤ServletRequest对象封装起来 2)进⼀步去调⽤Servlet容器中某个具体的Servlet 3)在 2)中,Servlet容器拿到请求后,根据URL和Servlet的映射关系,找到相应的Servlet 4)如果Servlet还没有被加载,就⽤反射机制创建这个Servlet,并调.

weixin_45136085的博客 639

IEEE PHM 2012轴承数据实战:用LSTM预测剩余寿命的完整流程与调参心得

本文详细解析了如何利用IEEE PHM 2012轴承数据集和LSTM模型进行轴承剩余寿命预测。从数据预处理、特征工程到LSTM模型架构设计和调参技巧,提供了完整的实战流程。特别分享了FEMTO-ST数据集的处理方法、RUL标签构建策略以及提升预测精度的关键技巧,帮助工程师实现更准确的预测性维护。

weixin_31100517的博客 369

Frida实战:如何用HashMap.put拦截法快速定位安卓App加密参数(附完整脚本)

本文详细介绍了如何使用Frida拦截HashMap.put方法快速定位安卓App加密参数,提供完整脚本和实战案例。通过动态分析技术,相比传统静态分析大幅提升效率,适用于电商、社交、金融等场景的加密参数定位。

jump7的博客 264

手把手带你写一个 MiniTomcat

MiniTomcat 的课程大体上分成四大块:HTTP Server、Connector、Container 和扩展部分。熟悉 Tomcat 的人想必更加清楚,Connector + Container 就是 Tomcat 的核心了。学习这些内容,会为进一步的研究打下良好的基础。

mirana的专栏 1451

无法找到来自源 nvlddmkm 的事件 ID 14 的描述

具体错误是: 无法找到来自源 nvlddmkm 的事件 ID 14 的描述。本地计算机上未安装引发此事件的组件,或者安装已损坏。可以安装或修复本地计算机上的组件。 出现这样错误的原因有很多了,有可能是硬件有可能是软件。由于我是刚配置的电脑,起初非常怀疑是自己组装的问题,折腾了好久,心态爆炸!!!先说我报这样错误的情况,以及解决办法,供后面人参考。 ...

SeventhBlue 6万+

手写实现一个迷你版的Tomcat

Tomcat,这只3脚猫,大学的时候就认识了,直到现在工作中,也常会和它打交道。这是一只神奇的猫,今天让我来抽象你,实现你! Tomcat是非常流行的Web Server,它还是一个满足Servlet规范的容器。那么想一想,Tomcat和我们的Web应用是什么关系? 从感性上来说,我们一般需要把Web应用打成WAR包部署到Tomcat中,在我们的We...

weixin_33850015的博客 374

Spring Boot入门(13):Mybatis-Plus之条件构造器使用手册:精通让你快速提高查询效率的技巧!

化繁为简,MP 中条件构造器的使用,极其详细.

**My Coding Family** 3万+

手把手教你完成YOLOv11分类识别界面搭建,使用Qt6设计YOLOv11分类识别系统,前台系统+后台管理系统开发实战,全网最详细教程

本项目结合YOLOv11分类识别算法和PySide6框架,开发了一套图形化分类识别系统。系统支持图片、视频和摄像头实时分类检测,并具备完善的用户管理功能,包括登录验证、个人信息修改等模块。最新版本新增了管理员后台管理系统,包含用户管理、权限控制等功能。系统采用MySQL数据库存储用户数据,界面设计采用QtDesigner完成,实现了高效的目标分类与友好的交互体验。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 1054

手把手带你写一个 MiniTomcat——代码篇

方法启动默认监听8080端口,如有需要可以提供配置到指定xml文件里;下如v1,v2,v3,v4每个代表一个版本。v1 简单的返回指定字符串。

mirana的专栏 1953

ArcGIS笔记13_利用ArcGIS制作岸线与水深地形数据?建立水动力模型之前的数据收集与处理?

在利用MIKE建立水动力模型之前,需要收集、处理和制作诸多数据和资料,主要有岸线数据、水深地形数据、开边界潮位驱动数据、风场数据、潮位和海流观测资料和站点潮汐调和常数资料等。本篇主要介绍这些资料的获取与处理。

晏长街的博客 5949

tomcat 拦截指定url_手写一个迷你版的 Tomcat 喵

前言Write MyTomcat2.1 MyRequest2.2 MyResponse2.3 MyServlet2.4 ServletMapping 和 ServletMappingConfig2.5 MyTomcat2.6 Test MyTomcat《Netty 实现原理与源码解析 —— 精品合集》《Spring 实现原理与源码解析 —— 精品合集》《MyBatis 实现原理与源码解析 —— 精...

weixin_39600510的博客 447

【实战】基于 Inner-IoU 的 YOLOv8 优化指南:显著提升检测精度

Inner-IoU 凭借辅助边框的创新设计,成功解决了传统 IoU 损失在小目标、遮挡场景下的收敛难题,为 YOLOv8 注入了更强的定位能力。从原理剖析到代码集成,本教程已为你铺就了一条“精度提升”的实战路径。现在,不妨亲自上手尝试,让你的目标检测模型在各类数据集上都能交出一份“精度优异”的答卷——相信我,当你看到检测框精准贴合目标的那一刻,你会明白这份尝试的价值。

m0_64661770的博客 108

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

手写Tomcat

tomcat提供的服务: 第一:提供Socket服务 第二:进行请求的分发 第三:需要把请求和响应封装成request/response

书生的博客 4098

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

自己手写tomcat项目

在Servlet(接口中)有:1.init():初始化servlet2.getServletConfig():获取当前servlet的配置信息3.service():服务器(在HttpServlet中实现,目的是为了更好的匹配http的请求方式)4.getServletInfo():获取servlet当前运行过程中的信息5.destroy():销毁,回收内存在I/O中应包含:1.请求头(f12+网络) 2.请求方式(get/post) 3.请求内容。

2302_79585857的博客 1800

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

如何用JAVA手写一个Tomcat

Socket(套接字)是计算机网络中用于进程间通信的核心技术,它允许不同主机或同一主机上的不同程序通过网络交换数据Socket 是什么?定义:Socket 是操作系统提供的抽象接口,本质上是通信的端点(Endpoint)。它封装了底层网络协议(如TCP/IP或UDP)的复杂性,提供了一组简单的API【API(Application Programming Interface,应用程序编程接口)是软件系统之间交互的桥梁,定义了如何请求服务、传递数据以及返回结果的规则。】供应用程序使用。关键要素IP地址。

2301_80391652的博客 2580

手写一个Tomcat服务器

作为java开发者,都知道Tomcat是一个家户喻晓的Web服务器。手写一个Tomcat对我们理解Tomcat的工作原理,还有servlet的执行流程有很大的帮助,下面是我手写一个简要版Tomcat的总结和收获! 首先,先还原Tomcat的本质: 相信大家之前在开发的时候,虽然已经能上手开发web程序,但是对于Servlet的执行流程以及项目还会存在很多疑问,下面是我总结的我之前的疑问也给出相应...

yechengchao的博客 2051

手写一个tomcat

手写一个tomcatTomcat即是一个web容器手写一个小型的tomcat分析源码来验证是不是这么做的讲解context标签list.add(servlet),源码是这么做的吗? Tomcat即是一个web容器 我认为这个容器要做的主要就是两件事: (1)监听端口 (2)添加一个个的servlet对象 比如在开发每个web项目的时候 —> web.xml文件 —>标签 —>...

weixin_37726803的博客 211

从零开始手写Tomcat,一文彻底搞懂Tomcat运行流程(附源码)

一:理论铺垫 tomcat的功能是什么? tomcat是java的一个中间件,浏览器发出HTTP请求后经过tomcat中间件,转发到目的服务器,目的服务器返回响应消息,通过tomcat返回给浏览器。tomcat的使用很简单,但是作为合格的程序员,光会用可不行,接下来就通过手写一个tomcat彻底搞懂tomcat。 在手写Tomcat之前,首先重温一下http和servlet,http协议...

Java鱼仔的博客 7769

手写简易Tomcat

通过手写tomcat对java中的网络通信有了更进一步的了解

Java新生代 1411

手写模拟一个tomcat

通过自己手写模拟tomcat的核心功能,能够让我们更好的理解tomcat的运行机制,底层也是通过jdk提供的api进一步步封装实现而来,我们作为使用者而言,可能更多关注使用上的方便、敏捷性,通过手写源码,相信我们会对tomcat有更加深刻的理解。

qq_36481984的博客 664
上一篇: 一个比 Spring Boot 快 44 倍的 Java 框架
下一篇: 不止 JDK7 的 HashMap ,JDK8 的 ConcurrentHashMap 也会造成 CPU 100%?原因与解决~
公众号-芋道源码
博客等级 码龄10年 1636粉丝 377原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值