Socket,Servlet,Tomcat

目录

​编辑 一. Tomcat

二、概述

1. HTTP 连接

三、Socket 连接

四、Socket 和http联系

所谓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是操作系统提供的用于两个程序进行端到端通信的接口,是对传输层和网络层通信端点的抽象,一般来说常用的是使用TCPUDP协议的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

 

  • 17
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Tomcat 是一个基于 Java 的 Web 服务器,它的主要功能是接收来自客户端的请求,并将请求传递给相应的 Servlet 进行处理。整个过程可以分为以下几个步骤: 1. 接收 Socket 连接:Tomcat 通过监听端口来接收客户端的 Socket 连接,一旦建立连接,就会创建一个对应的 Socket 对象。 2. 解析 HTTP 请求:Tomcat 会从 Socket 中读取 HTTP 请求报文,并对报文进行解析,包括请求方法、请求 URL、请求头、请求体等信息。 3. 路由请求:Tomcat 根据请求 URL 中的路径信息来确定应该将请求交给哪个 Servlet 进行处理,这个过程称为路由。 4. 创建 Servlet 上下文:每个 Servlet 实例都有自己的 Servlet 上下文,Tomcat 会根据 Servlet 的配置信息来创建 Servlet 上下文。 5. 创建 Servlet 实例:Tomcat 会根据 Servlet 类的配置信息来创建 Servlet 实例,并将 Servlet 上下文传递给 Servlet 实例。 6. 调用 Servlet 的 service 方法:Tomcat 会调用 Servlet 的 service 方法,并将 HTTP 请求和响应对象作为参数传递给该方法,Servlet 在 service 方法中进行业务处理,并将结果写回 HTTP 响应中。 7. 发送 HTTP 响应:Servlet 处理完请求后,Tomcat 会将 HTTP 响应报文发送回客户端,完成整个请求响应过程。 总的来说,Tomcat 是一个将 Socket 连接转化为 Java Servlet 的过程,通过 Servlet 的处理逻辑来实现 Web 服务器的功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值