一尘不染

如何序列化HttpServletRequest / HttpServletResponse?

java

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

您对故障排除有什么建议吗???

非常感谢!!!!


阅读 1357

收藏
2020-12-03

共1个答案

一尘不染

首先,您无法使用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等

2020-12-03