-2

我有两个客户端(A 和 B)和 Servlet。我想,当 A 客户端向 SERVLET 发送请求时,SERVLET 将请求重定向到客户端 B,客户端 B 将响应发送回客户端 A。客户端不是 SERVLETS !!!它们是普通的套接字客户端,因此不可能经典的 servlet 重定向!

你有什么故障排除建议???

非常感谢!!!!

4

1 回答 1

10

首先,您不能使用 Java 序列化来序列化 HttpServletRequest 或 HttpServletResponse。符合这些 API 的对象通常包括对 servlet 实现堆栈中的“东西”的引用,这些东西本质上是不可序列化的。

其次,您不能将请求“重定向”到另一个客户端。从 HTTP 协议的角度来看,这没有意义。

  • 当客户端向服务器发送请求并且服务器响应具有 3xx 状态代码表示“在其他地方尝试该请求”时,就会发生重定向。这是重定向到不同的服务器,而不是不同的客户端。

  • 甚至忽略重定向意味着什么的细节。您不能向 HTTP 客户端角色中的对象发送 HTTP 请求。它不会期待它(听它),也不知道如何处理它。(实际上这将违反 HTTP 协议。)

第三,“普通套接字客户端”不能与 HTTP 服务(使用 Servlet 或其他任何东西实现)通信。客户端必须至少实现 HTTP 协议的一个子集才能让 HTTP 服务理解它自己。可以“手动”实现,但 IMO 这是一个坏主意......当有高质量的实现可以免费使用时。

简而言之,您似乎想要做的事情是不可能/荒谬的。(如果我正确理解你的问题......这是有争议的。)


如果您在这里解释了您实际尝试做的事情,我们也许可以提出明智的替代方法。


我正在尝试跨服务器连接两个 java 客户端应用程序。客户端将能够直接与其他客户端通信。

从字面上看,您不能使用 HTTP 做到这一点。但是您可以构建一个 HTTP 服务器/servlet,将消息从一个客户端传输到另一个客户端;例如

  1. 客户端 A 向服务器发送包含 A 消息的 PUT 请求。
  2. 服务器存储消息并回复客户端 A。
  3. 客户端 B 发送一个 GET 请求,询问“任何消息?” 到服务器。
  4. 服务器查找消息并用来自 A 的消息进行响应。

但请注意,您不能使用普通的套接字客户端来做到这一点。客户端必须是 HTTP 客户端。

如果您准备放弃服务器是 HTTP 服务器/servlet 的要求,您可以让“简单套接字”客户端打开到服务器的双工连接,并让服务器在客户端之间传递“消息”。这需要为消息传递实现自定义“协议”。

第三种选择是使用现有的 RPC 或对象代理技术;例如 RMI、CORBA、ICE 等

于 2013-01-19T01:42:00.097 回答