Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Servlet 3.x在Tomcat7中获取POST正文并同时使用request.getParameter()_Java_Spring_Jsp_Tomcat_Servlets - Fatal编程技术网

Java Servlet 3.x在Tomcat7中获取POST正文并同时使用request.getParameter()

Java Servlet 3.x在Tomcat7中获取POST正文并同时使用request.getParameter(),java,spring,jsp,tomcat,servlets,Java,Spring,Jsp,Tomcat,Servlets,在本例中,我们希望获得原始的POST正文,同时使用request.getParameter()。但如果调用request.getParameter(),我们将无法读取原始正文 我找到了Servlet2.x的解决方案 但对于Servlet3.x,ServletInputStreamAPI发生了更改。ServletInputStream现在有抽象isReady()、isFinished()和setReadListener()来处理必须实现的非阻塞IO。有没有办法在Servlet3.x中实现这一点 对

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

我找到了Servlet2.x的解决方案

但对于Servlet3.x,ServletInputStreamAPI发生了更改。ServletInputStream现在有抽象isReady()、isFinished()和setReadListener()来处理必须实现的非阻塞IO。有没有办法在Servlet3.x中实现这一点


对于tomcat 7,解析参数时似乎没有调用getInputStream。

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()
。另外,您也可以从该方法中抛出一个<代码>未支持的操作异常>代码>。在您的链接中,您不清楚您的servlet 2 x的解决方案是什么,以及为什么它不再在servlet中工作。3. XI已经更新了链接到问题的答案,并添加了详细的更改。ServletInputStreamI尝试了此操作,并在读取正文后发现,request.getParameter()返回null