前言

心血来潮,记得上大学时老师曾经简单讲过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:进行请求处理

  1. 对客户端收到的流数据进行解析与封装,得到request对象
  2. 根据流数据与request对象得到response对象
  3. 对静态请求与动态请求分开处理,完善响应对象
  4. 关闭连接

二、请求

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相关推荐

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

    前言 在实际后台服务开发中,比如订单服务(开发者A负责)需要调用商品服务(开发者B负责),那么开发者B会和A约定调用API,以接口的形式提供给A.通常都是B把API上传到Maven私服,然后B开始写A ...

  2. 手写了一个简单的JSON解析器,网友直乎:牛!

    作者 | 田小波 来源 | http://r3m2u.cn/4455O 背景 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.相对于另一种数据交换格式 X ...

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

    前言 在Java领域,动态代理应用非常广泛,特别是流行的Spring/MyBatis等框架.JDK本身是有实现动态代理技术的,不过要求被代理的类必须实现接口,不过cglib对这一不足进行了有效补充.本 ...

  4. 超级简单的jQuery纯手写五星评分效果

    超级简单的评分功能,分为四个步骤轻松搞定: 第一步: 引入jquery文件:这里我用百度CDN的jquery: <script src="http://apps.bdimg.com/l ...

  5. 帝君级别 纯手写 原创 jQuery入门笔记

    帝君级别 纯手写 原创 jQuery入门笔记 广治君今天下午整理了一下jQuery的入门学习思路,以及学习内容 一.学习jQuery的目的 为什么要学习jQuery,低程度的一定是你在学前端或者后端, ...

  6. 纯手写原生PHP网站管理后台系统 网站管理系统

    一.源码简介 一套纯手写原生的PHP网站管理后台,前端利用LayUI实现,实现PHP初学者专研学习使用,对于PHP学习的人,只有熟悉了原生的PHP开发,才适合利用其它框架搭建自己的网站平台.封城期间, ...

  7. 纯手写SpringFramework-完结版(原创)

    个人简介 作者是一个来自河源的大三在校生,以下笔记都是作者自学之路的一些浅薄经验,如有错误请指正,将来会不断的完善笔记,帮助更多的Java爱好者入门. 文章目录 个人简介 纯手写SpringFrame ...

  8. 数值分析--线性方程组解的算法(6种)(附算法百度云链接,纯手写原创)

    先上干货百度云(纯手写,纯HTML,可直接打开),如下: 链接:https://pan.baidu.com/s/1LxZptQ6Wz0ROYnyT1x-u4g 密码:r7qd 注:参考书籍<数值 ...

  9. 实现一个简单的Tomcat

    实现一个简单的Tomcat 1. Tomcat作用 我们的web应用会运行在Tomcat中,那么显然请求必定是先到达Tomcat的,Tomcat对于请求实际上会进行如下的处理: 提供Socket服务: ...

最新文章

  1. html中运行php脚本,php脚本在html文件中
  2. 《GTA 5》走进现实!AI逼真还原游戏街景,还能“脑补”细节 | 英特尔出品
  3. 第8章3节《MonkeyRunner源码剖析》 5
  4. python 3389爆破机
  5. 腾讯工作心得:原型该画到什么程度?
  6. Oracle Sequence
  7. nginx解析php文件设置_nginx 解析php conf配置文件
  8. springboot 单测加入参数_Spring Boot集成Elasticsearch实战分享
  9. mongodb常用命令脚本化-自动化运维
  10. 因为太难而被禁用的17道Google面试题
  11. Bzoj1070 [SCOI2007]修车
  12. iOS之某公司iOS开发笔试题
  13. 重新审视SqlDataReader的使用
  14. RT-thread 环境下使用 HASH hwcrypto 配置使用底层硬件HAH库问题记录
  15. 安卓-几种查看SHA1和MD5的方法
  16. 第三章 眼睛的目视光学系统
  17. 英语听说计算机查分,2018中考第二次英语听说考明日查分,附查分常见问答
  18. 数据中心电气设计怎么做?丨规范、负荷计算、设备选型、微模块/液冷机房…...
  19. 计算机应用专业顶岗实习计划,计算机学生顶岗实习计划(网络版)
  20. vscode setting 配置

热门文章

  1. 单行文本溢出省略和多行文本溢出省略
  2. css里面的let,在css中创建类似边框效果的Droplet
  3. Oracle 你真的会用ltrim/rtrim函数吗?
  4. 【升级U8+】用友U8+数据升级,错误:列名 ‘bProduceByFeatureAllocate‘ 无效。
  5. Ubuntu设置中文环境
  6. JavaWeb——JSP实现书城首页
  7. oracle 监听启动、停止、查看命令
  8. 影视作品制作中不可或缺的技术支撑——云渲染技术
  9. 【拓展】1324- 服务端渲染SSR及实现原理
  10. unity禁用物体上的脚本或者组件