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