import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.InputStreamEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.params.HttpConnectionParams;
/**
* Example how to use unbuffered chunk-encoded POST request.
*/
public class ClientChunkEncodedPost {
public static void main(String[] args) throws Exception {
if (args.length != 1) {
System.out.println("File path not given");
System.exit(1);
}
HttpClient httpclient = new DefaultHttpClient();
// HttpPost httppost = new HttpPost("http://localhost:8088" +
// "/client/test.jsp?username=用户&password=秘密");
// HttpPost httppost = new HttpPost("http://localhost:8088/struts2/SendXmlServlet");
HttpPost httppost = new HttpPost("http://localhost:8088/struts2/StringServlet");
File file = new File(args[0]);
InputStreamEntity reqEntity = new InputStreamEntity(
new FileInputStream(file), -1);
reqEntity.setContentType("binary/octet-stream");
reqEntity.setChunked(true);
// It may be more appropriate to use FileEntity class in this particular
// instance but we are using a more generic InputStreamEntity to demonstrate
// the capability to stream out data from any arbitrary source
//
// FileEntity entity = new FileEntity(file, "binary/octet-stream");
httppost.setEntity(reqEntity);
// httppost.setEntity(entity);
httpclient.getParams().setIntParameter(HttpConnectionParams.SO_TIMEOUT,3000); //超时设置
httpclient.getParams().setIntParameter(HttpConnectionParams.CONNECTION_TIMEOUT, 3000);//连接超时
System.out.println("executing request " + httppost.getRequestLine());
try {
HttpResponse response = httpclient.execute(httppost);
HttpEntity resEntity = response.getEntity();
System.out.println("----------------------------------------");
System.out.println(response.getStatusLine());
if (resEntity != null) {
System.out.println("Response content length: " + resEntity.getContentLength());
System.out.println("Chunked?: " + resEntity.isChunked());
InputStream is = resEntity.getContent();
BufferedReader reader = new BufferedReader(
new InputStreamReader(is));
try {
// do something useful with the response
System.out.println(reader.readLine());
} catch (IOException ex) {
// In case of an IOException the connection will be released
// back to the connection manager automatically
throw ex;
} catch (RuntimeException ex) {
// In case of an unexpected exception you may want to abort
// the HTTP request in order to shut down the underlying
// connection and release it back to the connection manager.
httppost.abort();
throw ex;
} finally {
// Closing the input stream will trigger connection release
reader.close();
}
}
if (resEntity != null) {
resEntity.consumeContent();
}
} catch (IOException ex) {
// In case of an IOException the connection will be released
// back to the connection manager automatically
throw ex;
} catch (RuntimeException ex) {
// In case of an unexpected exception you may want to abort
// the HTTP request in order to shut down the underlying
// connection and release it back to the connection manager.
httppost.abort();
throw ex;
} finally {
// Closing the input stream will trigger connection release
}
// When HttpClient instance is no longer needed,
// shut down the connection manager to ensure
// immediate deallocation of all system resources
httpclient.getConnectionManager().shutdown();
}
}
=================================================================
StringServlet.java
====================================================================
package com.test.servlet;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.InputStreamEntity;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
public class StringServlet extends HttpServlet {
/**
* The doGet method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to get.
*
* @param request the request send by the client to the server
* @param response the response send by the server to the client
* @throws ServletException if an error occurred
* @throws IOException if an error occurred
*/
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
/**
* The doPost method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to post.
*
* @param request the request send by the client to the server
* @param response the response send by the server to the client
* @throws ServletException if an error occurred
* @throws IOException if an error occurred
*/
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
HttpClient client = new DefaultHttpClient();
//InputStream is = new FileInputStream(new File("e://3.xml"));
InputStream is = request.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
StringBuffer result = new StringBuffer();
String len;
while((len = reader.readLine()) != null){
result.append(len);
}
String xml = result.toString();
System.out.println("struts2.StringServlet:" + xml);
// StringEntity reqEntity = new StringEntity(xml);
// reqEntity.setContentType("application/x-www-form-urlencoded");
//
InputStreamEntity reqEntity = new InputStreamEntity(is,-1);
reqEntity.setContentType("binary/octet-stream");
reqEntity.setChunked(true);
HttpPost post = new HttpPost("http://localhost:8088/struts2/SendXmlServlet");
post.setEntity(reqEntity);
HttpResponse res = client.execute(post);
HttpEntity entity = res.getEntity();
if(entity != null){
System.out.println("Response content length: " + entity.getContentLength());
}
//显示结果
BufferedReader resultReader = new BufferedReader(new InputStreamReader(entity.getContent()));
String line = null;
while((line = resultReader.readLine()) != null){
System.out.println(line);
}
if(entity != null){
entity.consumeContent();
}
}
}