HttpClient4.x手动释放底层HTTP连接如非注明,本站文章均为原创,转载请注明出处。本文地址:http://www.yshjava.cn/post/421.html对于HttpClient4.x来说,使用完后的HttpClient对象,需要显式地释放其使用的底层HTTP连接,否则将造成过高的资源占用。前一篇文章《HttpClient4.x进行Get/Post请求并使用ResponseHandler处理响应》演示了如何使用ResponseHandler处理GET/POST请求的响应结果并自动释放底层HTTP连接,如下这个例子演示了如何确保在手动处理HTTP响应的情况下释放底层的HTTP连接回连接管理器。packagecn.ysh.studio.crawler.httpclient;importjava.io.IOException;importjava.io.InputStream;importorg.apache.http.HttpEntity;importorg.apache.http.HttpResponse;importorg.apache.http.client.HttpClient;importorg.apache.http.client.methods.HttpGet;importorg.apache.http.impl.client.DefaultHttpClient;/***这个例子演示了如何以推荐的方式使用API,以确保底层HTTP连接被释放回连接管理器**@authorShenghany*@date2013-5-19*/publicclassClientConnectionRelease{publicfinalstaticvoidmain(String[]args)throwsException{HttpClienthttpclient=newDefaultHttpClient();try{HttpGethttpget=newHttpGet("http://www.yshjava.cn");System.out.println("executingrequest"+httpget.getURI());//执行HTTP请求HttpResponseresponse=httpclient.execute(httpget);System.out.println("----------------------------------------");System.out.println(response.getStatusLine());System.out.println("----------------------------------------");//得到响应的实体HttpEntityentity=response.getEntity();//如果响应不包含实体,那么就不必关心连接的释放if(entity!=null){InputStreaminstream=entity.getContent();try{instream.read();//这里可以对输入流进行一些期望的操作//...}catch(IOExceptionex){//如果在处理过程中遇到IOExcetption异常,那么连接将被自动释放回连接管理器throwex;}catch(RuntimeExceptionex){//当发生意料之外的异常时,你或许希望通过终止http请求以立即关闭底层连接httpget.abort();throwex;}finally{//关闭输入流时将触发自动释放连接回连接管理器try{instream.close();}catch(Exceptionignore){}}}}finally{//当不再需要HttpClient实例时,关闭连接管理器以确保释放所有占用的系统资源httpclient.getConnectionManager().shutdown();}}}