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