Tomcat原理剖析-Tomcat应用服务器设计思想

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第15天,点击查看活动详情


1.写在前面

在昨天我们对tomcat,进行一些介绍和tomcat的发展历史,进行了相关的说明。

同时也对tomcat的目录结构,和如何构建tomcat源码,进行了详细的说明。

相关的详情,可以查看这里:Tomcat原理剖析-tomcat介绍和源码idea构建

那么今天我们继续的深入,深入的学习tomcat的架构设计和相关的核心组件原理。

来吧,继续搬砖喽!!!

image.png

2.架构及核心组件原理剖析

2.1 应用服务器设计思想

Web应用服务器的核心,是对Http协议的实现!

有高速公路的存在,才能有收费站的存在!

1 、Http协议工作流程

HTTP 是基于 TCP/IP 协议的 应用层协议 。它不涉及数据包(packet)传输,主要规定了客户端和服务器之间的通信格式,默认使用 80 端口。

所有类型的数据,均可采用Http传输。例如:图片、html网页、视频mp4、音频mp3、pdf、zip...

image.png

如图,HTTP基本工作流程:

  1. 用户通过浏览器访问网址,或点击链接。接着,浏览器获取发送请求事件

  2. 浏览器向服务端发出TCP连接请求

  3. 服务程序接受浏览器连接请求,经过TCP三次握手建立连接

  4. 浏览器将请求数据打包【HTTP协议格式数据包】

  5. 浏览器将该数据包推入网络。数据包经过网络传输,最终达到端服务程序。

  6. 服务端拿到数据包后,以HTTP协议格式解包,获取到客户端的意图。

  7. 得知客户端意图后进行处理。比如:提供静态文件或者调用服务端程序获得动态结果。

  8. 服务器将响应结果(可能是HTML或图片)打包【HTTP协议格式数据包】

  9. 服务器将响应数据包推入网络,数据包经过网络传输最终到达浏览器

  10. 浏览器拿到数据包后,以HTTP协议的格式解包,然后解析数据,假设这里的数据是HTML。浏览器将HTML文件展示在页面上

  • Tomcat作为一个轻量级Web应用服务器,支持HTTP作为传输协议。在整个过程中都做了些什么事情呢?

主要是接受连接、解析请求数据、处理请求和发送响应这几个步骤【工作流程中的 3 、 6 、 7 、 8 、 9 步骤】

也就是说,tomcat可以找到部署的应用,对应的资源,然后返回给浏览器。那就说明tomcat能解析我们的java应用,并能调到对应的java程序。

这里说的java程序,我们要分清。一般的只有main方法的程序,我们是无法调到。那怎么样的java程序,我们是可以调用到的呢?这里可能大部分人,都没有考虑过这个问题吧?

这里外部能调到的java程序,其实就是servlet java程序。这个希望大家能够理解。那我们讲一下servlet喽!!!

2 、什么是Servlet?

Servlet (Server Applet),全称 Java Servlet 。是用Java编写的服务器端程序。其主要功能在于交互式地浏览和修改数据,生成动态Web内容。

狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者。

Servlet运行于支持Java的应用服务器中。从实现上讲,Servlet可以响应任何类型的请求,但绝大多数情 况下Servlet只用来扩展基于HTTP协议的Web服务器。

说的简单点:通过Java编写的服务器动态资源的Web应用程序,也可以理解为Java中的一个接口。

Tomcat内部对网络请求是基于Servlet实现的。

3 、Tomcat如何设计Http服务器?-面向接口编程

各司其职

浏览器发给服务端的是一个HTTP格式的请求,HTTP服务器收到这个请求后,需要调用服务端程序来处理,所谓的服务端程序就是你写的Java类,一般来说不同的请求需要由不同的Java类来处理。

image.png

左边:表示HTTP服务器直接调用具体业务类,它们是紧耦合的。

右边:HTTP服务器不直接调用业务类,而是把请求交给容器来处理,容器通过Servlet接口调用业务类。 业务类和HTTP服务器是松耦合的。

由此可见,servlet,其实在我们的java web编程中,担任的角色是很重要的。一般上很多的框架,底层其实都是对servlet的封装,例如:springmvc,struts2等。。。

可能大部分的程序员都直接从springmvc,struts2学习,对servlet的理解并不深入。但是servlet是底层的东西,这个我们更应该去深入的学习一下原生的servlet编程。

那接下来,我们讲一下Servlet容器工作流程!!!

4 、Servlet容器工作流程详解

Web应用服务器的架构设计基本原理

基于Servlet规范实现

image.png

HTTP服务器不直接调用Servlet【为了解耦】,而是把请求交给Servlet容器来处理, 那Servlet容器又是 怎么工作的呢?

当客户请求某个资源时:

  1. HTTP服务器会用一个ServletRequest对象把客户的请求信息封装起来,然后调用Servlet容器的service()方法

  2. Servlet容器根据请求的URL和Servlet的映射关系,找到相应的Servlet

    • 如果Servlet还没有被加载,就用反射机制创建Servlet对象,并调用Servlet的init方法来完成初始化,接着调用Servlet的service方法来处理请求
    • 如果Servlet已经加载,直接调用Servlet的service方法来处理请求
  3. 请求处理完毕,Servlet容器把ServletResponse对象返回给HTTP服务器,HTTP服务器会把响应发送给客户端

总结:

应用服务器设计思想的核心,是对Http协议的实现,而tomcat服务器,也只是其中的一种实现而已。那tomcat的内部对网络请求是基于Servlet实现的,Servlet的工作流程,其实就是tomcat处理业务请求的主要核心思想了。


好了,本文文字描述,比较多,所以篇幅,不宜过长了,那今天就先到这里了,剩下的内容,就留下次分享了。

预告一下:Tomcat整体架构设计和Tomcat启动流程

image.png


好了,以上就是Tomcat原理剖析-tomcat应用服务器设计思想的分享了。

个人得实操,可能也有些不足,大家轻点喷!!!

个人理解,也可能不够全面,班门弄斧了。

如果觉得有收获的,帮忙点赞、评论、收藏一下呗!!!

image.png

猜你喜欢

转载自juejin.im/post/7130243964397060104