Tomcat 或任何网络服务器如何处理请求和发送响应?

how does Tomcat or any webserver handles requests and dispatches responses?

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

我有一个简单的 jsp 表单,上面有一个名称字段。我 post 我的名字到表单和 servlet returns 响应 "Hello Matt" (这里的名字是我 post 在表单上编辑的)。

现在我有很多客户端(不同的浏览器和选项卡)post连接到 servlet 并获得响应。 Tomcat(或任何网络服务器)如​​何知道将响应发送回何处。那就是每个 servlet 线程如何知道应该将响应分派给哪个客户端?这些信息保存在 Tomcat 中的什么地方?

谢谢

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

这个 article 稍微讨论了 tomcat 实施细节。您还可以通过 tomcat 源代码来了解工作流程。

不重要classes/packages:

org.apache.tomcat.util.net.ServerSocketFactory

org.apache.tomcat.util.net

您实际上可以使用 ServerSocket 编写一个简单的 HTTP 服务器,并以 HTTP RFC. See this question 后跟格式的格式向套接字写入消息以了解基础知识。

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