【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服务: ...
最新文章
- css和JavaScript
- mongodb学习笔记(2)--curd
- pytorch单机多卡的正确打开方式 以及可能会遇到的问题和相应的解决方法
- 三星Galaxy Note 10 Pro渲染图曝光:挖孔屏+前摄居中
- 有关label标签和单选按钮的注意事项
- 搭建基于ASP.NET 2.0的DNN 4.X模块开发环境及模块实例(2)
- C# 读写txt文件 写txt(IO) TXT追加
- 微分方程matlab绘图,Matlab学习——求解微分方程(组)
- 2018中国软件和信息技术服务综合竞争力百强企业名单
- 计算机论文目录大全,毕业论文目录范文
- 会议平板一体机常见触摸屏幕故障分析与解决
- 秋招面试题系列- - -Java工程师(十一)
- 外卖返利系统电影吃喝玩乐团购返利系统外卖探探外卖券儿外卖cps系统saas源码
- Excel批注教学:一键给多个单元格添加相同批注
- ConcurrentHashMap原理,在JKD7和JDK8版本的区别
- 腾讯云网站备案-网站访问类问题汇总及解答
- LSP技术 注入技术 劫持
- 多线程:线程同步与死锁(卖票案例)、线程通信、生产者与消费者
- 每个程序猿应该阅读的10本经典书籍
- 电影寒冬之下,票房靠“主旋律”能撑住场吗?《扫黑行动》仍在重播
热门文章
- 苏宁“星际家园”正式上线,区块链电商之战已打响
- 【cpufreq】【governor】【performance】
- jar命令查看查找搜索 jar, war 文件内容
- 小程序批发订货怎么做
- 什么是学位,学位与学历有什么区别?大部分人都误解了
- IDEA 调试图文教程,让bug无处藏身!
- java构造实部与虚部,1.定义一个复数类Complex,该类有代表实部与虚部的成员变量,有两个构造函数Complex()...
- 不跟风 Bespin Global中国市场淘金有备而来
- 【GCC编译优化系列】GCC链接失败的错误提示 undefined reference to ‘xxx‘ 可能还有一种情况你没注意到?
- 3.27 网易春招第一题--击杀怪物