带连接池的httpclient的使用小例
jar包取自于httpclient-4.1.1.jar1》:设置带连接池的HttpClientpublic class HttpClientUtils { private static final Log log = LogFactory.getLog(HttpClientUtils.class); private static ThreadSafeClientConnManager cm = null; static { SchemeRegistry schemeRegistry = new SchemeRegistry(); schemeRegistry.register(new Scheme("http", 80, PlainSocketFactory.getSocketFactory())); schemeRegistry.register(new Scheme("https", 443, SSLSocketFactory.getSocketFactory())); cm = new ThreadSafeClientConnManager(schemeRegistry); try { int maxTotal = Integer.valueOf(ResourceUtil.getSystem("httpclient.max_total")); cm.setMaxTotal(maxTotal); } catch (NumberFormatException e) { log.error("Key[httpclient.max_total] Not Found in systemConfig.properties", e); } // 每条通道的并发连接数设置(连接池) try { int defaultMaxConnection = Integer.valueOf(ResourceUtil.getSystem("httpclient.default_max_connection")); cm.setDefaultMaxPerRoute(defaultMaxConnection); } catch (NumberFormatException e) { log.error("Key[httpclient.default_max_connection] Not Found in systemConfig.properties", e); } } public static HttpClient getHttpClient() { HttpParams params = new BasicHttpParams(); params.setParameter(CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1); params.setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 3000); // 3000ms return new DefaultHttpClient(cm, params); } public static void release() { if (cm != null) { cm.shutdown(); } }}2》:对于HttpClientUtils的使用public final static UserLoginStatus verifyLogon(String token) { HttpClient httpClient = HttpClientUtils.getHttpClient(); HttpPost httpPost = new HttpPost(INFOPLATFORM_SERVICE_SESSION); List<NameValuePair> nvps = new ArrayList<NameValuePair>(); nvps.add(new BasicNameValuePair("interface", "verifyLogon")); nvps.add(new BasicNameValuePair("token", token)); UserLoginStatus result = null; try { httpPost.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8)); HttpResponse response = httpClient.execute(httpPost); if (response.getStatusLine().getStatusCode() != HttpStatus.SC_OK) { } else { HttpEntity entity = response.getEntity(); result = JsonConverter.toObj(EntityUtils.toString(entity), UserLoginStatus.class); } } catch (ClientProtocolException e) { log.error("method: UserLoginStatus [ClientProtocolException]", e); } catch (IOException e) { log.error("method: UserLoginStatus [IOException] invoke information platform failed", e); } catch (ParseException e) { log.error("method: UserLoginStatus [ParseException] invoke information platform failed", e); } catch (BaseException e) { log.error("method: UserLoginStatus [BaseException] invoke information platform failed", e); } // 调用接口失败 if (null == result) { result = new UserLoginStatus(); result.setCall_status("2"); result.setCall_message(INFOPLATFORM_ERR_MSG); } return result; }