httpclientを使用してpostリクエストservletサーバを送信し、servletは別のサーバにデータを求めてhttpclientに返す

7751 ワード

httpclientを使用してpostリクエストをサーバ側に送信し、サーバ側は別のサーバにデータを要求してhttpclientに返す
実現構想.
1、2つのWeb Appilcationプロジェクトを新設し、2つのサーバをサーバ側1とサーバ側2、1つのhttpclientシミュレーションを確立してpost要求を送信する3、サーバ1がhttpclientからの要求を受信した後、別のサーバ2に要求を開始する4、サーバ1がservletからの要求を受信し、サーバ1に応答する.5、サーバ1は、サーバ2が応答するデータをhttclientに送信する
詳細コードは次のとおりです.
httpclientはpost要求をサーバ1コードに送信する:
import org.apache.http.HttpEntity;
import org.apache.http.NameValuePair;
import org.apache.http.ParseException;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

/**
 *   :
 *
 * @author BZMing
 * @create 2019-08-12  10:44
 */
public class Client {

    public static void main(String[] args) throws IOException {

        //  httpClient  
        CloseableHttpClient httpClient = HttpClients.createDefault();
        //    
        String url = "http://localhost:8888/demo";
        //  httpPost
        HttpPost httpPost = new HttpPost(url);
        //       
        List params = new ArrayList();
        //    
        params.add(new BasicNameValuePair("msg" , "aaaaaaaaaaaaaaa"));

        //        httpPost
        httpPost.setEntity(new UrlEncodedFormEntity(params));

        httpPost.setHeader("Content-Type", "application/json;charset=UTF-8");

        //   
        CloseableHttpResponse response = null;
        try {
            //       (  )Post  
            response = httpClient.execute(httpPost);

            //             
            HttpEntity responseEntity = response.getEntity();

            System.out.println("     :" + response.getStatusLine());
            if (responseEntity != null) {
                System.out.println("       :" + responseEntity.getContentLength());
                System.out.println("     :" + EntityUtils.toString(responseEntity));
            }
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (ParseException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                //     
                if (httpClient != null) {
                    httpClient.close();
                }
                if (response != null) {
                    response.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}


サーバ1はhttpclientからの要求を受け入れ、データを加工処理し、別のサーバ2を要求する.
import org.apache.http.HttpEntity;
import org.apache.http.NameValuePair;
import org.apache.http.ParseException;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;

/**
 *   :
 *
 * @author BZMing
 * @create 2019-08-12  9:11
 */
@WebServlet("/demo")
public class servlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doPost(req,resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("application/json");
        resp.setCharacterEncoding("utf-8");
        req.setCharacterEncoding("utf-8");

        //    
        BufferedReader reader = req.getReader();
        String json = reader.readLine();
        System.out.println(json);
        reader.close();

        /**
         *                (    json,     endjson)
         */
        String endjson="demo   "+json+"  !";

        //  httpClient  
        CloseableHttpClient httpClient = HttpClients.createDefault();
        //    
        String url = "http://localhost:6666/test";
        //  http Post  
        HttpPost httpPost = new HttpPost(url);
        //       
        List params = new ArrayList();
        //    
        params.add(new BasicNameValuePair("str" , endjson));       // abcdefg              endjson

        //        httpPost
        httpPost.setEntity(new UrlEncodedFormEntity(params));
        //       
        httpPost.setHeader("Content-Type", "application/json;charset=UTF-8");
        CloseableHttpResponse response = null;
        //       (  )Post  
        response = httpClient.execute(httpPost);
        //             
        HttpEntity responseEntity = response.getEntity();
        //httpclient     ,                 
        String strmsg = EntityUtils.toString(responseEntity);
        System.out.println(strmsg);

        /**
         *                      strmsg       sendmsg
         */
        String sendString ="    "+strmsg+"  ";

        //             endmsg
        PrintWriter out = resp.getWriter();
        out.write(sendString);


        //    。
        if (reader!=null){
            reader.close();
        }
        if (httpClient != null) {
            httpClient.close();
        }
        if (response != null) {
            response.close();
        }
        if (out!=null){
            out.close();
        }

    }
}


サーバ2は、サーバ1からの要求を受け付け、データを返す
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.PrintWriter;

/**
 *   :
 *
 * @author BZMing
 * @create 2019-08-12  10:42
 */
@WebServlet("/test")
public class Servlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doPost(req,resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("application/json");
        resp.setCharacterEncoding("UTF-8");
        req.setCharacterEncoding("UTF-8");

        /**
         *     
         */
        BufferedReader reader = req.getReader();
        String json = reader.readLine();
        System.out.println(“        ”+json);
        reader.close();


        /**
         *     
         */
        PrintWriter out = resp.getWriter();
        String sendString;
        sendString="asdcfe";                  //          
        out.write(sendString);
        out.close();
    }
}