httpclient4学习-模拟通过流的形式向Servlet发送请求及超时的控制

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();

        }

        

    }



}

你可能感兴趣的:(httpclient)