tomcat实现(2)——tomcat的作用和运行流程

这是tomcat实现的第二篇,在web项目运行中,tomcat的作用和运行流程
完整源码地址:https://github.com/zhangjingao/tomcat.git

先来看一下,一个请求从发起到结束中间经历了什么
上张图,有图好说话
这里写图片描述

首先我画图技术真是。。。(天才,画的多形象,哈哈,皮一下)
由客户端浏览器发起请求,由服务器端tomcat接收,可以看出tomcat是一个多线程的,此时分出一个线程去执行这个请求,调用到servlet,servlet也是多线程的,有一个servlet对象池,此时由一个servlet对象去处理这个请求。

那么tomcat具体是怎么接收请求和处理请求(调用servlet)的呢?这是问题的核心。

  1. tomcat接收请求
    看图说话
    这里写图片描述
    在一次请求过程中,

    • 服务器端监听一个端口,比如8080,然后等待请求。
    • 由客户端也就是浏览器由socket套接字发起请求,然后建立连接,这个建立连接会有一个三次握手的过程,三次握手在这就不详细介绍了,然后连接建立成功。
    • 客户端就开始向服务器端发送http请求,http请求携带请求数据,也就是上图中的write,
    • 然后服务器端读(read)到请求数据就开始处理请求,处理完了后给客户端响应数据并回到读请求的状态。
    • 客户端接收到服务器端响应的数据后客户端会展示数据,并回到发送请求的状态。
      那么更重的点来了,长连接和短连接是什么呢?
      http1.0协议是短连接,自从http1.1开始支持长连接。所谓的长连接并不是tcp连接,而是http连接。

    长连接: 上述五个步骤之后客户端和服务器端的tcp连接并未断开,而这次http请求呢,也并未结束,而是返回到发送请求的状态,客户端依然可以使用这个http连接发送请求,换句话说就是客户端和服务器端建立完tcp连接后,多个请求可以使用一个http连接,这就是http长连接。

    短连接:如果上述五个步骤之后,客户端这个http请求并没有回到发送请求的状态,而是直接销毁,重新建立一个新的http请求连接,换句话说就是客户端和服务器端建立完tcp连接后,一个请求使用一个http连接,发一个请求就要重新建立一个新的http连接,那么这个连接就是一个短连接。

  2. tomcat的调用流程

    • tomcat要能够同时接收多个客户端发来的请求,那么就需要多线程。
    • tomcat想要调用servlet就是得到这个servlet对象和类所在地址的映射关系。
    • tomcat本身并不知道客户端会访问哪一个servlet,所以tomcat必须要能够动态的去调用servlet对象,那么就需要用到java的反射机制。
    • 定位到具体的servlet并调用get或post方法并响应客户端。

好了,tomcat的作用和运行流程已经基本顺清楚了,下一篇就是详细的介绍实现

猜你喜欢

转载自blog.csdn.net/zhangjingao/article/details/80634904