一、httpcomponents简介
httpcomponents 是apache下的用来负责创建和维护一个工具集的低水平Java组件集中在HTTP和相关协议的工程。我们可以用它在代码中直接发送http请求,而无需用到页面的js去完成。该项目由一下几个部分组成:
1、HttpComponents Core:
HttpCore 是一套的低级别的 HTTP 传输组件可用于构建自定义客户端和服务器端 HTTP 服务与一个最小的足迹。HttpCore 支持两种模型: 阻止基于经典 Java I/O 和非阻塞 I/O 模型,事件驱动的 I/O 模型基于 Java NIO。阻塞 I/O 模型可能更适合于数据密集型、 低延迟的情况,而非阻塞模型可能更适合高延迟场景尤其是原始数据吞吐量不 有效地同时处理 成千上万的HTTP连接.而非阻塞模型可能更适合于高延迟情况下 有效地同时处理成千上万的并发HTTP连接的能力比处理原始数据吞吐量更重要的时候。
2、HttpComponents Cilent
HttpClient是一个HTTP/1.1并且兼容HTTP代理的一个实现,基于HttpCore。它为客户端验证,HTTP状态管理,HTTP连接管理,提供哦你一个可重复使用的组件。 HttpComponents Client是Commons HttpClient 3.x的一个替代者和继承者。
3、HttpComponents AsyncCore
HttpClient是一个HTTP/1.1并且兼容HTTP代理的一个实现,基于HttpCore NIO和HttpClient components。它是Apache HttpClient的一个辅助模块,在处理大量的并发连接的能力比原始数据吞吐量性能更重要的特殊情况下用到。
二、HttpClient post上传文件
当我们上传一个文件的时候,一般都会有个key值对应这个文件。后台可以通过rquest,通过这个key值获取这个key对于的文件。传递参数也是一样。这里我们用到httpcomponents中的HttpClient组件,下载地址为:http://hc.apache.org/downloads.cgi . 使用到的jar包如下:
三、示例代码
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 }
后台打印信息,会显示文件上传的结果。