【Tomcat】——纯手写实现一个简单的Tomcat
前言
心血来潮,记得上大学时老师曾经简单讲过Tomcat底层的实现原理,并给我们演示过简单的实现,趁着刚毕业还没有全部忘记,回温一下记录在这里,在这里纯底层实现一个简单可以访问静态文件以及动态请求的Tomcat服务器。
实现功能:
1:静态资源请求
2:动态请求处理
3:session及cookie信息存储,为方便下文的理解不了解的同学可以先自行了解一下session和cookie
简单流程
一、准备
1、准备需要用到的基本类
这里先理清流程,简单的说明实现的类、方法及思路,完整源码最后奉上!
Cookie:请求信息中cookie信息类,简单应用只实现了cookie的name和value两个属性
ServletContext:servlet上下文,所有servlet都共享这个对象
Servlet接口:所有Servlet类必须直接或者间接实现的一个接口
HttpServlet:提供相应的服务方法,如doPost()/doGet()等
HttpSession: 存储session对象
2、启动服务器
MyTomcat:启动类,启动一个socketServer监听客户端过来的请求,相信接触过socket的同学都了解这一段代码
当有请求过来的时候,服务器会启动线程来处理请求
3、请求与响应处理类
ServerService:进行请求处理
- 对客户端收到的流数据进行解析与封装,得到request对象
- 根据流数据与request对象得到response对象
- 对静态请求与动态请求分开处理,完善响应对象
- 关闭连接
二、请求
HttpServletRequest:请求信息类,对客户端收到的流数据进行解析与封装,得到request对象
要解析并得到request对象中的以下属性:
1.将请求流数据转为String
2.解析请求信息
具体每个方法的解析细节请大家查看最后的源码,在此不赘述
三、响应
响应根据静态请求与动态请求分别做了不同的处理:
1.静态请求响应
StaticProcessor:静态处理类
HttpServletResponse.sendRedirect():找到请求的资源文件,设置对应的响应类型,将文件写入到响应流中返回
2.动态请求响应
DynamicProcess:动态请求处理类
测试
Login:测试登录servlet类
User:测试用户类
启动:
1.静态请求
2.动态请求:
正常动态请求是没有问题的
请求其他接口也可以获取到Login接口中存储的session信息,而且这些请求的sessionid都是一样的,所以我们的session功能也实现成功!
感谢你看到这里,看的开心记得点个赞或者关注哦!
源码地址:https://github.com/wangzhijun1124/MyTomcat
【Tomcat】——纯手写实现一个简单的Tomcat相关推荐
- 【手写系列】纯手写实现一个高可用的RPC
前言 在实际后台服务开发中,比如订单服务(开发者A负责)需要调用商品服务(开发者B负责),那么开发者B会和A约定调用API,以接口的形式提供给A.通常都是B把API上传到Maven私服,然后B开始写A ...
- 手写了一个简单的JSON解析器,网友直乎:牛!
作者 | 田小波 来源 | http://r3m2u.cn/4455O 背景 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.相对于另一种数据交换格式 X ...
- 【手写系列】纯手写实现JDK动态代理
前言 在Java领域,动态代理应用非常广泛,特别是流行的Spring/MyBatis等框架.JDK本身是有实现动态代理技术的,不过要求被代理的类必须实现接口,不过cglib对这一不足进行了有效补充.本 ...
- 超级简单的jQuery纯手写五星评分效果
超级简单的评分功能,分为四个步骤轻松搞定: 第一步: 引入jquery文件:这里我用百度CDN的jquery: <script src="http://apps.bdimg.com/l ...
- 帝君级别 纯手写 原创 jQuery入门笔记
帝君级别 纯手写 原创 jQuery入门笔记 广治君今天下午整理了一下jQuery的入门学习思路,以及学习内容 一.学习jQuery的目的 为什么要学习jQuery,低程度的一定是你在学前端或者后端, ...
- 纯手写原生PHP网站管理后台系统 网站管理系统
一.源码简介 一套纯手写原生的PHP网站管理后台,前端利用LayUI实现,实现PHP初学者专研学习使用,对于PHP学习的人,只有熟悉了原生的PHP开发,才适合利用其它框架搭建自己的网站平台.封城期间, ...
- 纯手写SpringFramework-完结版(原创)
个人简介 作者是一个来自河源的大三在校生,以下笔记都是作者自学之路的一些浅薄经验,如有错误请指正,将来会不断的完善笔记,帮助更多的Java爱好者入门. 文章目录 个人简介 纯手写SpringFrame ...
- 数值分析--线性方程组解的算法(6种)(附算法百度云链接,纯手写原创)
先上干货百度云(纯手写,纯HTML,可直接打开),如下: 链接:https://pan.baidu.com/s/1LxZptQ6Wz0ROYnyT1x-u4g 密码:r7qd 注:参考书籍<数值 ...
- 实现一个简单的Tomcat
实现一个简单的Tomcat 1. Tomcat作用 我们的web应用会运行在Tomcat中,那么显然请求必定是先到达Tomcat的,Tomcat对于请求实际上会进行如下的处理: 提供Socket服务: ...
最新文章
- html中运行php脚本,php脚本在html文件中
- 《GTA 5》走进现实!AI逼真还原游戏街景,还能“脑补”细节 | 英特尔出品
- 第8章3节《MonkeyRunner源码剖析》 5
- python 3389爆破机
- 腾讯工作心得:原型该画到什么程度?
- Oracle Sequence
- nginx解析php文件设置_nginx 解析php conf配置文件
- springboot 单测加入参数_Spring Boot集成Elasticsearch实战分享
- mongodb常用命令脚本化-自动化运维
- 因为太难而被禁用的17道Google面试题
- Bzoj1070 [SCOI2007]修车
- iOS之某公司iOS开发笔试题
- 重新审视SqlDataReader的使用
- RT-thread 环境下使用 HASH hwcrypto 配置使用底层硬件HAH库问题记录
- 安卓-几种查看SHA1和MD5的方法
- 第三章 眼睛的目视光学系统
- 英语听说计算机查分,2018中考第二次英语听说考明日查分,附查分常见问答
- 数据中心电气设计怎么做?丨规范、负荷计算、设备选型、微模块/液冷机房…...
- 计算机应用专业顶岗实习计划,计算机学生顶岗实习计划(网络版)
- vscode setting 配置
热门文章
- 单行文本溢出省略和多行文本溢出省略
- css里面的let,在css中创建类似边框效果的Droplet
- Oracle 你真的会用ltrim/rtrim函数吗?
- 【升级U8+】用友U8+数据升级,错误:列名 ‘bProduceByFeatureAllocate‘ 无效。
- Ubuntu设置中文环境
- JavaWeb——JSP实现书城首页
- oracle 监听启动、停止、查看命令
- 影视作品制作中不可或缺的技术支撑——云渲染技术
- 【拓展】1324- 服务端渲染SSR及实现原理
- unity禁用物体上的脚本或者组件