当前位置: 首页 > 面试题库 >

如何序列化HttpServletRequest / HttpServletResponse?

莘翰采
2023-03-14
问题内容

我有两个客户端(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,将消息从一个客户端传输到另一个客户端。例如

  1. 客户端A向服务器发送包含A消息的PUT请求。
  2. 服务器存储消息并答复客户端A。
  3. 客户端B发送GET请求,询问“是否有任何消息?” 到服务器。
  4. 服务器查找消息,并使用来自A的消息进行响应。

但是请注意,使用普通套接字客户端 无法 做到这一点。客户端必须是HTTP客户端。

如果您准备放弃服务器是HTTP服务器/
servlet的要求,则可以让“简单套接字”客户端打开与服务器的双工连接,并使服务器在客户端之间传递“消息”。这需要实现用于消息传递的自定义“协议”。

第三种选择是使用现有的RPC或对象代理技术。例如RMI,CORBA,ICE等



 类似资料:
  • 我目前正试图弄清楚如何在Java上使用我用JavaScript在JSP上生成的二维数组。问题在于,当我将其分配给表单上隐藏的现有属性以便通过请求发送时,它会生成一个包含所有值的完整字符串,如下所示: 我怎样才能使html表单上的字段成为数组(我认为这是不可能的),或者将完整的数组发送到我的Java后端?Project正在使用Struts,因此这是一个Action类。谢谢各位。

  • 问题内容: 我一直在尝试将对象序列化为CSV,但是该对象包含,并且不能在对象上使用。 预期样本输出 : 实际输出 : 这是我的代码 :(其中大多数是2个POJO) 我尝试的一切似乎都没有任何效果,但找不到有效的解决方案。 抱歉,我无缘无故留下的毫无意义的注释,如果您回答了代码,请随时删除它们。 问题答案: 从错误中,我想相信这与您的模式有关,该模式的列取自on 而不是值。 您可能想在其中添加,但是

  • 问题内容: 如何序列化未实现Serializable的对象?我不能将其标记为Serializable,因为该类来自第3方库。 问题答案: 您不能序列化未实现的类,但可以将其包装在可以实现的类中。为此,您应该在包装器类上实现和,以便可以以自定义方式序列化其对象。 首先,使您的非序列化字段。 在中,首先调用流以存储所有非瞬态字段,然后调用其他方法来序列化不可序列化对象的各个属性。 在中,首先调用流以读

  • 问题内容: 如何优雅地序列化lambda? 例如,下面的代码抛出。如何在不创建“虚拟”界面的情况下进行修复? 问题答案: Java 8引入了通过添加多个边界将对象转换为类型的交集的可能性。因此,在序列化的情况下,可以编写: 并且lambda自动变为可序列化的。

  • 我加载xml文件如下 使2类 我加载xml文件(temp.xml),然后序列化类2位置和头然后StringReader,它从文件中读取字符串,然后类序列化成为反序列化 但我看到error error msg在XML文档中有一个错误(1,1)。哪里?:at系统。Xml。序列化。XmlSerializer。在系统上反序列化(XmlReader XmlReader、String encodingStyl

  • 问题内容: 我的直觉告诉我,必须以某种方式将其转换为字符串或byte [](在Go中甚至可能是相同的东西?),然后将其保存到磁盘。 我找到了这个包(http://golang.org/pkg/encoding/gob/),但似乎仅用于结构? 问题答案: 序列化数据有多种方法,Go为此提供了许多软件包。某些常见编码方式的软件包: 处理地图很好。以下示例显示了地图的编码/解码: 操场