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

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

1.1 应用服务器设计思想

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

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

1 、Http协议工作流程

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

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

如图,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类来处理。

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

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

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

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

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

4 、Servlet容器工作流程详解

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

基于Servlet规范实现

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处理业务请求的主要核心思想了。


转自:https://juejin.cn/post/7130243964397060104

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值