如何序列化HttpServletRequest / HttpServletResponse?

我有两个客户端(A和B)和Servlet。 我想,当一个客户端向SERVLET发送请求时,SERVLET将请求重定向到客户端B,客户端B将响应发送回客户端A.客户端不是服务器! 它们是普通的socket客户端,因此不是经典的servlet重定向!

你有任何疑难解答的建议???

非常感谢!!!!

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

其次,您无法将请求“重定向”到另一个客户端。 从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等