如何序列化HttpServletRequest/HttpServletResponse?

-2 java serialization servlets

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

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

非常感谢!!!!

Ste*_*n C 8

首先,您不能使用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等