这可能是一个简单的问题。但我正在寻找低水平的细节,我找不到明确的答案。
我有一个简单的jsp表单,上面有一个名字字段。我将我的名字发布到表单中,servlet返回响应" Hello Matt" (这里的名字就是我在表格上公布的内容)。
现在我有许多客户端(不同的浏览器和标签)发布到servlet并获得回复。 Tomcat(或任何网络服务器)如何知道将响应发送回去的位置。那就是每个servlet线程如何知道应该将响应分派给哪个客户端?这些信息在Tomcat中保存在哪里?
谢谢
答案 0 :(得分:4)
Java内置了服务器套接字java.net.ServerSocket实现,用于接受来自任何客户端的TCP连接。一旦服务器接受来自客户端的连接,它也可以将任何消息发送回客户端。 Tomcat实现HTTP协议并以HTTP协议格式与客户端通信。
这个article谈论了tomcat的实现细节。您还可以通过tomcat源代码来了解工作流程。
很少有重要的课程/套餐:
org.apache.tomcat.util.net.ServerSocketFactory
org.apache.tomcat.util.net
您实际上可以使用ServerSocket编写一个简单的HTTP服务器,并以HTTP RFC格式向套接字写入消息。请参阅this question以了解基础知识。
答案 1 :(得分:1)
Tomcat依赖于java.net.Socket和其他相关类。它在TCP端口(默认值:8080)上运行,并通过主机的IP地址和主机用于连接到Tomcat的TCP端口来标识每个请求。浏览器通过此连接发送HTTP请求。 Tomcat包含处理多个HTTP请求的线程池。对于每个请求,tomcat从其池中分配一个线程来处理请求。当响应已生成并发回时,该线程可以自由并准备好提供另一个请求。