目录
所谓SpringMVC Boot Cloud应该都处于处理业务
Tomcat 约等于 HTTP服务器(连接器) + Servlet容器
也就是说Tomcat能将请求交由Servlet容器去处理,容器根据请求转发到具体的Servlet上,并且帮助我们管理Servlet
再来张SpringMVC的经典图
关于拦截器,过滤器一起上吧
一. Tomcat
servlet是web容器的一个组件,而我把Tomcat理解成一个web容器
servlet的缺点就是一次请求一会响应需要一个servlet
而SpringMVC的非常重要的关键点在于用一个servlet------>DispatcherServlet来代替
首先TCP、IP为传输层协议,Socket 叫套接字接口,是传输层为应用程序提供的接口,那么我们再Java中进行网络编程,就会使用并创建套接字,当套接字建立了连接且有数据传输时,我们也就拿到了字节流数据,此时那么字节流的数据怎样才能映射成具体的数据呢,当然了,就根据应用层的协议,比如HTTP1.1进行解析,解析后呢,我们就拿到了相应的数据,拿到数据之后呢,为了响应请求,比如请求的意思是“我给你一个id,你去帮我找这个人的信息”,那么我们又要去调用具体的service业务了,拿到返回数据之后,则先根据刚才的应用层协议包装一下响应数据,再通过Socket传输给请求端。
这个过程显然存在很多冗余代码,Tomcat的存在,就是为了帮助我们简化这个过程
还是以请求过程为例:
它首先使用一个叫连接器的组件帮助我们处理底层的 Socket 通信,并且根据对应的应用层协议解析获得的字节流。然后将获取到的字节流我们映射为 ServletRequest对象。然后再使用容器组件来帮助我们根据URL调用到相应的servlet组件,我们程序员只需要关注servlet组件中业务的书写。
这样的话,Tomcat就帮助我们将请求与业务解耦了。也就是Tomcat夹在了业务和请求之间
socket是操作系统提供的用于两个程序进行端到端通信的接口,是对传输层和网络层通信端点的抽象,一般来说常用的是使用TCP,UDP协议的socket(也有raw socket,也就是可以选择不使用TCP/IP协议,不过用的很少)。
然后TCP socket只提供了基于TCP的字节流通信,没有规定这个字节流里的内容代表啥,于是就需要应用层协议,也就是以HTTP,FTP,SMTP等为代表的协议,这些协议是在使用TCP协议通信的基础上定制的。那如何使用TCP进行通信?答案就是使用socket,所以socket其实跟TCP,HTTP这些不能并列讲,因为它不是协议,它是使用某个协议的进行通信的接口。UDP也一样是用socket。
tomcat属于基于HTTP协议的一个服务器程序,和前面的也不是一类的,而servlet是tomcat中一个部件,那其实跟什么通信都没啥关系了,他就是一个用于实现业务的接口,tomcat接收,解释HTTP消息内容之后交给servlet,servlet处理完生成结果之后再使用tomcat的接口把结果发给客户端,servlet只负责处理,由tomcat来收发。
所以总的来说就是,人们使用socket,让socket基于TCP/UDP等协议来保证双方能收发以字节为单位的信息,这个信息仅仅代表二进制内容,就跟你10101010可以看做字符也可以看做数一样,是没有规定其含义的。然后用HTTP协议来规定这些字节要怎么排列,分成哪几个部分,每个部分代表什么意思,这样就有了含义。最后tomcat则再使用HTTP协议,来跟客户端交换信息,交换的是什么信息则由servlet处理,最终实现一个可配置可扩展的web服务器。
网络的东西层次性是很强的,上层基于下层,servlet基于tomcat运行,tomcat基于HTTP协议进行通信,HTTP基于TCP实现,而TCP通信则是通过调用系统提供的socket函数进行,TCP是协议,socket则是实现这个协议的协议栈。同理还有类似的必如HttpClient,HttpServer这样的类,就是HTTP协议栈,是协议的软件实现,这个跟socket是一类的,只不过位于的层级不一样。
Socket是最底层的通信机制
HTTP是Socket之上的封装层,例如 HttpClient 等。
Servlet是Java 对 HTTP的封装层,目的是为了更好的处理HTTP请求(包括参数)和HTTP响应,毕竟HTTP就分为请求和响应两大部分。
Tomcat是Servlet容器。Servlet必须运行在容器之上。
目前的操作系统提供给应用程序网络通信模块都是套接字,也就是你说的Socket,其实Socket是一个接口,是操作系统网络模块中的给应用程序提供的传输层接口,以解决应用程序与其它主机进行通信的功能,Servlet和tomcat的底层都是通过调用操作系统的socket接口来实现通信的。其实还有蓝牙通信,串口通信,但是主要都是用在近距离设备控制中,不适合我们通常网络通信
Socket是地,tomcat是房子,房子里面住着的是servlet
二、概述
HTTP 协议:超文本传输协议,对应于应用层,用于如何封装数据.
TCP/UDP 协议:传输控制协议,对应于传输层,主要解决数据在网络中的传输。
1. HTTP 连接
http 为短连接:客户端发送请求都需要服务器端回送响应.请求结束后,主动释放链接,因此为短连接。通常的做法是,不需要任何数据,也要保持每隔一段时间向服务器发送"保持连接"的请求。这样可以保证客户端在服务器端是"上线"状态。
HTTP连接使用的是"请求-响应"方式,不仅在请求时建立连接,而且客户端向服务器端请求后,服务器才返回数据。
三、Socket 连接
要想明白 Socket,必须要理解 TCP 连接。
TCP 三次握手:握手过程中并不传输数据,在握手后服务器与客户端才开始传输数据,理想状态下,TCP 连接一旦建立,在通讯双方中的任何一方主动断开连接之前 TCP 连接会一直保持下去。
Socket 是对 TCP/IP 协议的封装,Socket 只是个接口不是协议,通过 Socket 我们才能使用 TCP/IP 协议,除了 TCP,也可以使用 UDP 协议来传递数据。
创建 Socket 连接的时候,可以指定传输层协议,可以是 TCP 或者 UDP,当用 TCP 连接,该Socket就是个TCP连接,反之是TCP。
四、Socket 和http联系
若双方是 Socket 连接,可以由服务器直接向客户端发送数据。
若双方是 HTTP 连接,则服务器需要等客户端发送请求后,才能将数据回传给客户端。
因此,客户端定时向服务器端发送请求,不仅可以保持在线,同时也询问服务器是否有新数据,如果有就将数据传给客户端。
http协议是建立在socket之上的。
1.在web领域,常见的场景是浏览器发送请求到服务器,这种时候要建立http;
第一次请求时,如果客户端浏览器会发送close,则tomcat会立即关掉socket;
如果每次请求不是断开服务器连接,那么请求时发送keep-alive,则tomcat不会立即关掉socket,socket可以复用;
不是每个http连接都会建立socket请求,这个是可以设置的,通常是一个socket对应多个http请求。
原文链接:https://blog.csdn.net/Forward__/article/details/120095922