1、httpcomponents簡介java
httpcomponents 是apache下的用來負責建立和維護一個工具集的低水平Java組件集中在HTTP和相關協議的工程。咱們能夠用它在代碼中直接發送http請求,而無需用到頁面的js去完成。該項目由一下幾個部分組成:apache
一、HttpComponents Core:服務器
HttpCore 是一套的低級別的 HTTP 傳輸組件可用於構建自定義客戶端和服務器端 HTTP 服務與一個最小的足跡。HttpCore 支持兩種模型: 阻止基於經典 Java I/O 和非阻塞 I/O 模型,事件驅動的 I/O 模型基於 Java NIO。阻塞 I/O 模型可能更適合於數據密集型、 低延遲的狀況,而非阻塞模型可能更適合高延遲場景尤爲是原始數據吞吐量不 有效地同時處理 成千上萬的HTTP鏈接.而非阻塞模型可能更適合於高延遲狀況下 有效地同時處理成千上萬的併發HTTP鏈接的能力比處理原始數據吞吐量更重要的時候。併發
二、HttpComponents Cilent工具
HttpClient是一個HTTP/1.1而且兼容HTTP代理的一個實現,基於HttpCore。它爲客戶端驗證,HTTP狀態管理,HTTP鏈接管理,提供哦你一個可重複使用的組件。 HttpComponents Client是Commons HttpClient 3.x的一個替代者和繼承者。post
三、HttpComponents AsyncCore性能
HttpClient是一個HTTP/1.1而且兼容HTTP代理的一個實現,基於HttpCore NIO和HttpClient components。它是Apache HttpClient的一個輔助模塊,在處理大量的併發鏈接的能力比原始數據吞吐量性能更重要的特殊狀況下用到。ui
2、HttpClient post上傳文件url
當咱們上傳一個文件的時候,通常都會有個key值對應這個文件。後臺能夠經過rquest,經過這個key值獲取這個key對於的文件。傳遞參數也是同樣。這裏咱們用到httpcomponents中的HttpClient組件,下載地址爲:http://hc.apache.org/downloads.cgi . 使用到的jar包以下:spa
3、示例代碼
1 package com.demo.test; 2 3 import java.io.File; 4 import java.io.IOException; 5 6 import org.apache.http.HttpEntity; 7 import org.apache.http.client.ClientProtocolException; 8 import org.apache.http.client.methods.CloseableHttpResponse; 9 import org.apache.http.client.methods.HttpPost; 10 import org.apache.http.entity.mime.MultipartEntityBuilder; 11 import org.apache.http.entity.mime.content.FileBody; 12 import org.apache.http.impl.client.CloseableHttpClient; 13 import org.apache.http.impl.client.HttpClients; 14 import org.apache.http.util.EntityUtils; 15 16 public class Test { 17 18 public static String uploadFile(String uploadurl, File file) { 19 CloseableHttpClient client = HttpClients.createDefault(); 20 HttpPost post = new HttpPost(uploadurl); 21 FileBody bin = new FileBody(file);// 文件 22 23 HttpEntity reqEntity = MultipartEntityBuilder.create() 24 .addPart("media", bin).build();// 請求體. media爲文件對於的key值 25 post.setEntity(reqEntity); 26 String responseContent = null; // 響應內容 27 CloseableHttpResponse response = null; 28 try { 29 30 response = client.execute(post); 31 if (response.getStatusLine().getStatusCode() == 200) { 32 HttpEntity entity = response.getEntity(); 33 responseContent = EntityUtils.toString(entity, "UTF-8"); 34 } 35 } catch (ClientProtocolException e) { 36 e.printStackTrace(); 37 } catch (IOException e) { 38 e.printStackTrace(); 39 } finally { 40 try { 41 if (response != null) 42 response.close(); 43 44 } catch (IOException e) { 45 e.printStackTrace(); 46 } finally { 47 try { 48 if (client != null) 49 client.close(); 50 } catch (IOException e) { 51 e.printStackTrace(); 52 } 53 } 54 } 55 return responseContent; 56 } 57 58 public static void main(String[] args) { 59 String result = uploadFile("http://www.xxx.com/file/upload.action", new File( 60 "c:/test.txt")); 61 System.out.println(result); 62 } 63 64 }
後臺打印信息,會顯示文件上傳的結果。