Servlets Apache Commons HTTPClient 3.x保持连接打开

Servlets Apache Commons HTTPClient 3.x保持连接打开,servlets,gwt-rpc,apache-commons-httpclient,Servlets,Gwt Rpc,Apache Commons Httpclient,我正在使用HttpClient对远程servlet执行PostMethod,由于某种原因,我的很多连接都挂断并占用了我服务器的所有连接。 以下是有关该体系结构的更多信息 GWT客户端调用GWT服务 GWT服务实例化HttpClient,创建PostMethod并让客户端执行该方法 然后,它通过调用方法.getResponseBodyAsStream()获取输入流,并将其写入字节数组 然后它关闭输入流并刷新字节数组输出流,再执行几行代码,然后调用method.releaseConnection()

我正在使用HttpClient对远程servlet执行PostMethod,由于某种原因,我的很多连接都挂断并占用了我服务器的所有连接。
以下是有关该体系结构的更多信息
GWT客户端调用GWT服务
GWT服务实例化HttpClient,创建PostMethod并让客户端执行该方法
然后,它通过调用方法.getResponseBodyAsStream()获取输入流,并将其写入字节数组
然后它关闭输入流并刷新字节数组输出流,再执行几行代码,然后调用method.releaseConnection()

一定是我忽略了什么导致了这一切。如果我在浏览器中对同一服务执行GET,则连接会立即关闭,但有关HTTPClient的某些信息会导致它们挂起打开。

您需要调用HttpMethodBase#releaseConnection()。如果返回一个InputStream供以后使用,一种简单的方法是使用匿名FilterInputStream overwriting close()将其包装:

final HttpMethodBase method = ...;
return new FilterInputStream(method.getResponseBodyAsStream())
{
  public void close() throws IOException
  {
    try {
      super.close();
    } finally {
      method.releaseConnection();
    }
  }
};