当前位置: 首页 > 知识库问答 >
问题:

为什么不能多次读取HttpServletRequest的主体?

微生翼
2023-03-14

我遇到了这个问题,我正在使用Javax.servlet阅读请求,然后它正在清除该请求。因此,当我在过滤器链中向前传递它时,它以空值的形式传递请求。

我能够通过以下类似的解决方案来解决这个问题:

如何在Spring'HandlerMachodArgumentResolver'中多次读取请求正文?

我的问题是,为什么不允许我们多次阅读该请求?

共有1个答案

海翼
2023-03-14

为什么不能多次读取HttpServletRequest的主体?

因为这需要 servlet 堆栈来缓冲整个请求正文...以防 servlet 决定重新读取它。这将是所有请求的性能和/或内存利用率的损失。除非有足够的内存来缓冲最大预期请求正文的多个实例(对于多个同时请求),否则它将无法正常工作。

请注意,除非 HTTP 请求失败,否则无法让客户端重新发送数据。即使这样,客户端也可能无法重新发送它...因为它可能无法缓冲数据本身。

简而言之:servlet API不支持重读请求体,因为它不能扩展。如果servlet想要重读数据,它需要自己缓冲它。

 类似资料:
  • 我正在最新版本(汇流5.5.1)中的AWS EC2实例上测试ksqldb,遇到了一个无法解决的访问问题。 我有一个安全的Kafka服务器(SASL_SSSL,SASL模式为普通),一个不安全的模式注册表(Avro序列化器的另一个问题,但暂时还可以),以及一个安全的KSQL服务器和客户机。 主题可以用来自JDBC源连接器的AVRO数据(只有值,没有键)正确填充。 我可以使用KSQL访问KSQL服务器

  • 我是完全新的Web API的,并试图建立一个Android应用程序观看谷歌联系人。我被Oauth的第一步卡住了。我已经完成了登录按钮和授权。按钮工作正常,我可以登录我的谷歌账户,但当我试图从这个账户获得一些东西时,日志猫打印了这个按摩“I/System_Server:oneway函数结果将被删除,但以状态OK和包裹大小结束”。为什么会这样?因为auth令牌不再有效?如何恢复权限?我应该如何从帐户获

  • 几个相关问题: 是什么导致第一次读取返回1179字节?某种文件头? 为什么从中读取的内容分页到2048字节的大小,而不是包装指定的值? 是否有方法将配置为从缓冲区读取2048字节以上?

  • 我一直在尝试打印和HTTP post使用Swift的一个移动应用程序,我可以用javascript和express登录它。js。但当使用Go创建的服务器时,它会给我: 下面你可以看到所有3种语言的代码: 斯威夫特: 在另一个文件的@obj func中调用: 戈朗代码: 可以阅读文章的Javascript服务器: 谢谢你抽出时间

  • 问题内容: 我有这段代码,可以从请求输入流中读取输入,并使用JacksonMapper转换为POJO。它在带有guice支持的码头7集装箱中运行。 但是,有时在负载下会引发以下异常。我已经检查了我的客户端,并且确定它发送了一个有效的json字符串。怎么了?负载下Jetty 7的预期行为吗? 问题答案: 如果它已经被预先消耗,它将为空。这将隐式进行,每当你打电话,,,,等上。确保不要调用任何一种方法

  • 我对Java和OOP都是新手。但是,我使用notify读取一个特征,然后使用read读取回调中的多个特征。 我想知道,为什么在使用readCharacteristic(我的特征)时,只能从单个特征(除了通知的特征)中获取值。蓝牙gatt回调声明如下: 公共布尔值 (BluetoothGattCharacteristic characteristic characteristic)从相关远程设备读取