如何序列化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,将消息从一个客户端传输到另一个客户端; 例如
- 客户端A向服务器发送包含A消息的PUT请求。
- 服务器存储消息并回复客户端A.
- 客户端B发送一个询问“任何消息?”的GET请求。 到服务器。
- 服务器查找消息并使用来自A的消息进行响应。
但请注意,使用普通套接字客户端无法做到这一点。 客户端必须是HTTP客户端。
如果您准备放弃服务器是HTTP服务器/ servlet的要求,您可以让“简单套接字”客户端打开到服务器的双工连接,并让服务器在客户端之间传递“消息”。 这需要实现用于消息传递的自定义“协议”。
第三种方法是使用现有的RPC或对象代理技术; 例如RMI,CORBA,ICE等