我有两个客户端(A和B)和Servlet。我想,当一个客户端向SERVLET发送请求时,SERVLET将请求重定向到客户端B,客户端B将响应发送回客户端A.客户端不是服务器!它们是普通的套接字客户端,因此不可能是经典的servlet重定向!!
您对故障排除有什么建议???
非常感谢!!!!
答案 0 :(得分:8)
首先,您无法使用Java序列化序列化HttpServletRequest或HttpServletResponse。符合这些API的对象通常包含对servlet实现堆栈中“stuff”的引用,这些内容本质上是不可序列化的。
其次,您无法将请求“重定向”到另一个客户端。从HTTP协议的角度来看,它没有意义。
当客户端向服务器发送请求并且服务器响应具有3xx状态代码,表示“在其他地方尝试该请求”时,会发生重定向。它是重定向到不同的服务器,而不是不同的客户端。
甚至忽略重定向的含义细节。您不能将HTTP请求发送到HTTP客户端角色中的某些内容。它不会期待它(听它),也不会知道如何处理它。 (事实上,这将违反HTTP协议。)
第三,“普通套接字客户端”无法与HTTP服务通信(使用Servlet或其他任何方式实现)。客户端必须至少实现HTTP协议的一个子集,以便HTTP服务能够理解它自己。有可能实现“手工”,但IMO这是一个坏主意......当有高质量的实现时,您可以免费使用。
简而言之,您似乎想要做的事情是不可能/荒谬的。 (如果我理解你的问题......这是有争议的。)
如果您解释了您在这里尝试做的事情,我们或许可以提出合理的替代方法。
我正在尝试跨服务器连接两个java客户端应用程序。客户端将能够与其他客户直接通信。
从字面上看,你无法使用HTTP做到这一点。但是你可以构建一个HTTP服务器/ servlet,将消息从一个客户端传输到另一个客户端; e.g。
但请注意,无法使用普通套接字客户端执行此操作。客户端必须是HTTP客户端。
如果您准备放弃服务器是HTTP服务器/ servlet的要求,您可以让“简单套接字”客户端打开到服务器的双工连接,并让服务器在客户端之间传递“消息”。这需要为消息传递实现自定义“协议”。
第三种方法是使用现有的RPC或对象代理技术;例如RMI,CORBA,ICE等等