Java 如何序列化HttpServletRequest/HttpServletResponse?

Java 如何序列化HttpServletRequest/HttpServletResponse?,java,servlets,serialization,Java,Servlets,Serialization,我有两个客户机(A和B)和Servlet。我想,当客户端向SERVLET发送请求时,SERVLET将请求重定向到客户端B,客户端B将响应发送回客户端A。客户端不是SERVLET!!!它们是普通的套接字客户端,因此不可能实现经典的servlet重定向 您对故障排除有什么建议吗 非常感谢 首先,不能使用Java序列化来序列化HttpServletRequest或HttpServletResponse。符合这些API的对象通常包括对servlet实现堆栈中“stuff”的引用,该实现堆栈本质上是不可序

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

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


非常感谢

首先,不能使用Java序列化来序列化HttpServletRequest或HttpServletResponse。符合这些API的对象通常包括对servlet实现堆栈中“stuff”的引用,该实现堆栈本质上是不可序列化的

其次,您不能将请求“重定向”到另一个客户端。从HTTP协议的角度来看,这是没有意义的

  • 当客户机向服务器发送请求,服务器响应有一个3xx状态代码,上面写着“在其他地方尝试该请求”时,就会发生重定向。它是指向不同服务器的重定向,而不是指向不同的客户端

  • 甚至忽略重定向的细节。无法向HTTP客户端角色中的某个对象发送HTTP请求。它不会期待它(倾听它),也不知道如何处理它。(事实上,这违反了HTTP协议。)

第三,“普通套接字客户端”不能与HTTP服务(使用servlet或其他任何方式实现)通信。客户端必须至少实现HTTP协议的一个子集,以便HTTP服务能够理解它自己。“手工”实施是可能的,但在国际海事组织,这是一个坏主意。。。当有高质量的实现时,您可以免费使用

简言之,你似乎想做的事是不可能的/荒谬的。(如果我正确理解你的问题……这是有争议的。)


如果你解释了你在这里实际想做的事情,我们也许能够提出明智的替代方法



我正在尝试跨服务器连接两个java客户端应用程序。客户机将能够直接与其他客户机通信

从字面上说,你不能用HTTP来做这件事。但您可以构建一个HTTP服务器/servlet,将消息从一个客户端传输到另一个客户端;e、 g

  • 客户机A向服务器发送一个PUT请求,其中包含一条消息
  • 服务器存储消息并答复客户端A
  • 客户端B向服务器发送一个GET请求,询问“有消息吗?”
  • 服务器查找消息并使用来自A的消息进行响应
  • 但请注意,普通套接字客户端无法做到这一点。客户端必须是HTTP客户端

    如果您准备放弃服务器是HTTP服务器/servlet的要求,那么可以让“简单套接字”客户端打开到服务器的双工连接,并让服务器在客户端之间传递“消息”。这需要为消息传递实现一个定制的“协议”


    第三种选择是使用现有的RPC或对象代理技术;e、 g.RMI、CORBA、ICE等等

    您试图解决的真正问题是什么?我正在尝试跨服务器连接两个java客户端应用程序。客户将能够直接与其他客户沟通……没有服务器,我试图通过重读来理解op的思维过程,给这个问题一个机会,但仍然无法。两个java客户端应用程序?希望您能更多地了解“客户”的含义。感谢您的及时回复!!我有两个不同的客户端应用程序。他们在不同的地点,互相交换信息。我试图找到通过服务器将这两个应用程序组合起来的最简单方法。发送的数据不能通过服务器。服务器仅用于连接它们。这类似于TCP/UDP打孔……如果A需要直接向B发送信息,它需要直接打开与B的连接。服务器唯一可能的角色可能是告诉A B在哪里;i、 作为某种“名称服务”或“交易者服务”。你认为Java RMI可以通过服务器在两个客户端之间建立直接连接吗?@sales1307不可以。RMI也是一种客户机/服务器协议。我认为,在您了解“客户机”和“服务器”实际上是请求/响应交互中两个角色的名称之前,您不会在这方面取得任何进展。因此,如果有东西向“客户机B”发送请求,那么“客户机B”必须处于服务器角色才能接收请求。“客户端”发送请求。“服务器”侦听请求并发送回复。