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

Servlet3.x在Tomcat7中获取POST主体并同时使用request.getParameter()

贝德辉
2023-03-14

在我们的例子中,我们希望获得原始的POST主体,同时使用request.getParameter()。但是如果我们调用request.getParameter(),我们将无法读取原始正文。

但是对于Servlet3.x,ServletInputStream API被更改了。ServletInputStream现在有了抽象的isReady()、isFinished()和setReadListener()来处理必须实现的非阻塞IO。有没有办法在Servlet3.x中这样做?

对于Tomcat7,在解析参数时似乎不调用getInputStream。

共有1个答案

司寇安宜
2023-03-14

ServletInputStream中的新Servlet 3.1方法可以实现如下,扩展了链接解决方案:

public class CachedServletInputStream extends ServletInputStream {
    private ByteArrayInputStream input;

    public CachedServletInputStream(byte[] cached) {
      /* create a new input stream from the cached request body */
      input = new ByteArrayInputStream(cached);
    }

    public int read() throws IOException {
        return input.read();
    }

    public boolean isFinished() {
        return input.available() == 0;
    }

    public boolean isReady() {
        return true;
    }

    public void setReadListener(ReadListener listener) {
        listener.onAllDataRead();
    }
}

不确定ReadListener是否也需要回调onDataAvailable()。或者,您也可以从该方法抛出unsupportedoperationexception,该方法可能从未在应用程序中调用过。

 类似资料:
  • 我有以下问题:我试图在Spring控制器处理POST请求之前获取它的主体。为此,我使用HandlerInterceptorAdapter的preHandle()方法。 如本讨论中所述 SpringREST服务:从请求中检索JSON 我也使用使用此包装器,我设法打印了第一个POST请求的正文,但第二个POST抛出一个IOException:流关闭。 您对如何获取所有POST请求的正文有什么想法吗?

  • 问题内容: 您对我的问题有什么建议吗?我需要同时使用get和post。得到,因为我需要输出用户输入的内容。并发布,因为我需要访问与该输入相关的mysql数据库。看起来像这样: 这将根据用户将检查的内容输出mysql的内容: 这两个结合起来的形式动作将如下所示: 当我这样做时,我确实会收到很多未定义的错误。您可以建议我做些什么,以获取用户输入的值以及mysql数据。 问题答案: 执行HTTP Req

  • 我正在做一个Java/J2EE项目,其中有几个Web应用程序。我想在一些webapps中介绍log4j。所以我添加了log4j-1.2。WEB-INF\lib中的16.jar和log4j。WEB-INF\classes中的属性 结果我得到一个NoClassDefFoundError: 当我试图直接在Tomcat内部安装log4j时,我也会遇到同样的错误。(我已经在tomcat/lib等中添加了pr

  • 当我做POST请求调用使用JsonObjectRequest在凌空然后在某些wifi它是发送空的身体。但是它可以很好地处理StringRequest POST请求。它在所有移动网络上都运行良好。 我正在使用node。js服务器和expressjs/body解析器。当我使用邮递员发出邮件请求时,一切正常。 错误是什么?如果有人想看我能提供的代码。 使用StringRequest的POST请求 POS

  • 我正在尝试通过xmlhttprequest或jqueryajax通过跨服务器发送文件,这两种方式似乎都是将文件发送到我的dev服务器,在那里我有一个php将比特流保存为docx格式。 问题是,当我将它发送到我的客户机服务器时,它们会得到0字节。奇怪的是…当我用邮递员发送文件的时候,效果很好。下面是我读取和发送文件的代码。 我还可以获取发送到服务器的数据。我客户的开发人员说的是我需要在POST BO

  • 具体来说,我希望下面的示例可以工作: 如果这不是POST请求的正确方式,请告诉我如何在FastAPI中从上传的CSV文件中选择所需的列。