Tomcat或任何Web服务器如何处理请求和分派响应?

Tomcat或任何Web服务器如何处理请求和分派响应?,tomcat,servlets,webserver,Tomcat,Servlets,Webserver,这可能是一个简单的问题。但是我在寻找一些我没有找到明确答案的低级细节 我有一个简单的jsp表单,上面有一个名称字段。我将我的名字发布到表单中,servlet返回响应“Hello Matt”(这里的名字就是我在表单中发布的名字) 现在我有许多客户端(不同的浏览器和选项卡)发布到servlet并获得响应。Tomcat(或任何Web服务器)如何知道将响应发送回哪里。这就是每个servlet线程如何知道响应应该发送到哪个客户机?这些信息在Tomcat中保存在哪里 感谢Java内置了服务器套接字实现,用于

这可能是一个简单的问题。但是我在寻找一些我没有找到明确答案的低级细节

我有一个简单的jsp表单,上面有一个名称字段。我将我的名字发布到表单中,servlet返回响应“Hello Matt”(这里的名字就是我在表单中发布的名字)

现在我有许多客户端(不同的浏览器和选项卡)发布到servlet并获得响应。Tomcat(或任何Web服务器)如何知道将响应发送回哪里。这就是每个servlet线程如何知道响应应该发送到哪个客户机?这些信息在Tomcat中保存在哪里


感谢

Java内置了服务器套接字实现,用于接受来自任何客户端的TCP连接。一旦服务器接受来自客户端的连接,它也可以将任何消息发送回客户端。Tomcat实现HTTP协议,并以HTTP协议格式与客户端通信

本文将讨论一点tomcat实现的细节。您还将通过tomcat源代码了解工作流程

几个重要的类/包:

org.apache.tomcat.util.net


实际上,您可以使用ServerSocket编写一个简单的HTTP服务器,并将消息以后跟的格式写入套接字。请参阅以了解基础知识。

Tomcat依赖于java.net.Socket和其他相关类。它在TCP端口(默认值:8080)上运行,并通过主机的IP地址和主机用于连接到Tomcat的TCP端口来标识每个请求。浏览器通过此连接发送HTTP请求。Tomcat包含处理多个HTTP请求的线程池。对于每个请求,tomcat从其池中分配一个线程来处理请求。当响应生成并发送回时,该线程将释放并准备好服务另一个请求。

每个生成响应并将其发送回客户端的线程是如何处理的。每个线程都有TCP端口和地址信息吗?没有线程不包含这些信息。来自客户端的请求通过连接器接收,然后通过连接器将它们导入引擎,引擎是Tomcat中的关键请求处理组件。服务的任何一个连接器接收到的任何请求都会传递到服务的单个引擎。这个引擎称为Catalina,负责处理请求和生成响应。引擎将响应返回到连接器,然后连接器使用适当的通信协议将其传输回客户端。此链接是否有帮助