tomcat架构解析<2>

在这里插入图片描述

下一步 此时会创建一个过滤器链,这个过滤器链就是我们假如要定义一个Filter
此时需要执行的逻辑

	   //...执行servlet之前[pre]
		filterChain.dofiter()// 在执行这个过滤器链子过程钟 我可能会执行servlet
	  //..执行servlet之后[after]
	 类似于这样,也就是说一个请求,被tomcat接受后 先执行fitler的pre方法   再执行	filterChain.dofiter()  这个方法 ,在这个中间就会执行servlet,然后再会执行after方法 

在这里插入图片描述
所以说此时真正来执行servlet的doget方法是
在这里插入图片描述
看他的入参 看见了没有 此时是这个对象
在这里插入图片描述
这个方法再点进来 就是servlet.service

在这里插入图片描述
再回到servle 此时不就调用到了这里么
所以说

所以说真正调用doget的逻辑 并不在在tomcat 而是在Httpservlet,
也就是说tomcat里面实际上调用的是我们的servlet.service,最终会让我们
HttpServlet来负责并且判断调用doget(), 并且执行接下来的逻辑

在这里插入图片描述
现在我吧后半截说了 ,现在说下前半截 就是说request对象怎么生成的?
浏览器从一个请求 到 --------------------->request对象到底是发生了什么事情

说白了 tomcat此时就是接受数据 然后将数据封装成request对象,
呢么tomcat毕竟是一个应用程序,应用程序的数据从哪里来的,肯定是操作系统给的
呢么操作系统的数据又是从哪里来,肯定是另外一台服务器给的
所以此时可以这么想

服务器A---------->服务器B
(浏览器)
服务器A 给服务器B发送数据
数据+ip(服务器B)
我们此时的每一个请求都是安全可靠的,此时的可靠就代表着在发送数据过程中间
数据是不可以丢失的 ,	此时就涉及到tcp协议
================================================>
tcp协议可以保证服务器B 接受的数据是完整的 也就是说不会丢失
协议只是规范,此时需要有人来实现这个协议 操作系统来实现 的 比方说window,linux 
因为tcp 协议只是一个传输协议,[负责数据的传输]具体传输的数据是什么 此时与我不关心 ,所以此时用操作系统来实现比较好 
============================================?
也就是数据是应用程序生成的数据然后再来掉用操作系统的接口将数据进行传输
应用程序生成的数据调用操作系统的接口来传输数据
tcp协议肯定是在操作系统这个层面上实现的
===========================>
{
    
    
所以说此时
	应用程序生产数据
	建立一个tcp连接
	基于Tcp连接发送数据
}
建立一个tcp连接  最开始要进行3次握手
但是此时我Java程序需要建立tcp连接 不可能调用到你操作系统的方法底层(tcp-connect)方法,或者说操作系统的核心方法不会让你上层的应用程序来调用
 此时操作系统会创建一个socket接口来 供上层应用程序调用 继而调用底层的核心来建立tcp
 	socket是操作系统提供的接口 而我们的上层的应用程序只能使用这个socket











在这里插入图片描述

当我new 一个Socket的时候 最终会调用本地的这个方法来进行tcp连接
socket是操作系统提供的, 供我们建立tcp连接用
源码就不看了 不好找

再回到我们的tomcat , 对于tocmat来说 就是去取数据 因为他经常是接受别人所发送的数据 然后封装成request
呢么tomcat从哪里接受数据呢
当然是socket上,呢么 tomcat 接下来要做得就是 从socket中取出来的数据来进行解析,然后 封装成Request

接下来 我们tomcat 要做的事情就是把我从socket拿出来的数据
	进行解析 解析成请求  通过什么方式来解析 我们通常用的http协议
	Http协议是一个应用层面得协议,
	 说白了 我不关注于数据得传输,我只关心数据得格式
==================================================》
也就是下一步tomcat 接受到了一个http协议也就是说一个请求得时候,
就要吧数据按照http协议的格式吧这个数据解析出来对吧然后解析成request对象
-------------------->
 tomcat从socket中取数据,此时需要涉及到io模型, Bio nio aio
 tomcat7 可以配置的bio nio
 tomact8 默认的是nio
 

在这里插入图片描述

tomcat里面有个组件 Connector ,
connector 就是一个连接器 
 负责 接收数据以及解析数据,处理的协议格式为HTTP/1.1

在这里插入图片描述

在这里插入图片描述

也就是说如果此时 你在这里配置的 是 HTTP/1.1 这个的话
我就用 org.apache.coyote.http11.Http11Protocol[协议处理器]
 这个协议处理器来处理你的请求,自然讲此时可以自定义协议处理器
也就是说
 我现在要解析数据  呢么你到底是那个类 负责来解析数据   

我们吧这个类点进去 看看他的构造方法 此时就涉及到io模型了

在这里插入图片描述

这个endPoint就和io模型有关 这里的jioEndPoint 就是我们常说的bio
也就是说tomcat此时提供不同的io模型来取处理数据


在这里插入图片描述

也就是说tomcat现在使用 bio的io模型来接受socket的数据,
呢么接下来要做的就是依据http协议来解析数据 对吧 他是如何解析的  

在这里插入图片描述

他里面有一个内部类

在这里插入图片描述

在这里插入图片描述

我们现在这种Bio的这种方式
tomcat每接受一个socket 他会怎么做呢

在这里插入图片描述

如果io模型是bio模型 ,呢么每一个socket连接对应一个线程
然后将这个线程放入线程池中来管理这个线程
 也就是说这个线程中的run方法是执行 解析数据的流程
 

在这里插入图片描述

 他解析的第一步就是此时的请求是一个https请求 ,就需要握手
 第二步就是处理

在这里插入图片描述

 然后点进来  就可以看到如何处理的请求   Http协议   请求行 请求报头 请求体 空白行
 今天只是大致说下请求的流程

猜你喜欢

转载自blog.csdn.net/weixin_43689953/article/details/109588786