前言

心血来潮,记得上大学时老师曾经简单讲过Tomcat底层的实现原理,并给我们演示过简单的实现,趁着刚毕业还没有全部忘记,回温一下记录在这里,在这里纯底层实现一个简单可以访问静态文件以及动态请求的Tomcat服务器。

实现功能

1:静态资源请求

2:动态请求处理

3:session及cookie信息存储,为方便下文的理解不了解的同学可以先自行了解一下session和cookie

简单流程

20190726170833895.png

一、准备

1、准备需要用到的基本类

这里先理清流程,简单的说明实现的类、方法及思路,完整源码最后奉上!

Cookie:请求信息中cookie信息类,简单应用只实现了cookie的name和value两个属性

20190726144957545.png

ServletContext:servlet上下文,所有servlet都共享这个对象

20190726150243672.png

Servlet接口:所有Servlet类必须直接或者间接实现的一个接口

20190726145253147.png

HttpServlet:提供相应的服务方法,如doPost()/doGet()等

20190726150001603.png

HttpSession: 存储session对象

20190726150540468.png

2、启动服务器

MyTomcat:启动类,启动一个socketServer监听客户端过来的请求,相信接触过socket的同学都了解这一段代码

2019072615304978.png

当有请求过来的时候,服务器会启动线程来处理请求

3、请求与响应处理类

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

ServerService:进行请求处理

20190726153220903.png

二、请求

HttpServletRequest:请求信息类,对客户端收到的流数据进行解析与封装,得到request对象

要解析并得到request对象中的以下属性:

20190726155737331.png

1.将请求流数据转为String

20190726160041478.png

2.解析请求信息

20190726160343546.png

三、响应

响应根据静态请求与动态请求分别做了不同的处理:

20190726160800642.png

StaticProcessor:静态处理类

20190726160911190.png

HttpServletResponse.sendRedirect():找到请求的资源文件,设置对应的响应类型,将文件写入到响应流中返回

20190726161411882.png

2.动态请求响应

DynamicProcess:动态请求处理类

20190726162150198.png

测试

Login:测试登录servlet类

20190726163130697.png

User:测试用户类

20190726164350264.png

启动

20190726165320995.png

1.静态请求

2.动态请求:

20190726163926543.png

20190726163950954.png

正常动态请求是没有问题的

20190726164012259.png

请求其他接口也可以获取到Login接口中存储的session信息,而且这些请求的sessionid都是一样的,所以我们的session功能也实现成功!

感谢你看到这里,看的开心记得点个赞或者关注哦!

源码地址:https://github.com/wangzhijun1124/MyTomcat


版权声明:文章转载请注明来源,如有侵权请联系博主删除!
最后修改:2019 年 12 月 25 日 11 : 53 AM
如果觉得我的文章对你有用,请随意赞赏