当前位置: 代码迷 >> java >> Servlet 3.x在Tomcat 7中获取POST正文并同时使用request.getParameter()
  详细解决方案

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

热度:94   发布时间:2023-07-17 20:47:37.0

在我们的例子中,我们想要获取原始的POST正文并同时使用request.getParameter()。 但是,如果调用request.getParameter(),我们将无法读取原始内容。

我找到了针对servlet 2.x的解决方案, 。

但是对于Servlet 3.x,更改了ServletInputStream API。 ServletInputStream现在具有抽象isReady(),isFinished()和setReadListener()来处理必须实现的非阻塞IO。 有什么想法要在Servlet 3.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() 另外,您也可以从该方法中抛出UnsupportedOperationException ,在您的应用程序中可能永远不会调用它。

  相关解决方案