下一次复用上一次的HttpClient请求

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

public class ClientUtils {
    /**
     * 日志
     */
    private static final Log logger = LogFactory
            .getLog(ClientUtils.class);

    private static final Map clients = new HashMap<>();

    public static void addClient(String ip, Object client) {
        clients.put(ip, client);
    }

    public static Object getClient(String ip) {
        return clients.get(ip);
    }

    /**
     * 获取请求主机IP地址,如果通过代理进来,则透过防火墙获取真实IP地址;
     * 
     * @param request
     * @return
     * @throws IOException
     */
    public final static String getIpAddress(
            HttpServletRequest request) throws IOException {
        // 获取请求主机IP地址,如果通过代理进来,则透过防火墙获取真实IP地址

        String ip = request.getHeader("X-Forwarded-For");
        if (logger.isInfoEnabled()) {
            logger.info(
                "getIpAddress(HttpServletRequest) - X-Forwarded-For - String ip="
                        + ip);
        }

        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            if (ip == null || ip.length() == 0
                    || "unknown".equalsIgnoreCase(ip)) {
                ip = request.getHeader("Proxy-Client-IP");
                if (logger.isInfoEnabled()) {
                    logger.info(
                        "getIpAddress(HttpServletRequest) - Proxy-Client-IP - String ip="
                                + ip);
                }
            }
            if (ip == null || ip.length() == 0
                    || "unknown".equalsIgnoreCase(ip)) {
                ip = request.getHeader("WL-Proxy-Client-IP");
                if (logger.isInfoEnabled()) {
                    logger.info(
                        "getIpAddress(HttpServletRequest) - WL-Proxy-Client-IP - String ip="
                                + ip);
                }
            }
            if (ip == null || ip.length() == 0
                    || "unknown".equalsIgnoreCase(ip)) {
                ip = request.getHeader("HTTP_CLIENT_IP");
                if (logger.isInfoEnabled()) {
                    logger.info(
                        "getIpAddress(HttpServletRequest) - HTTP_CLIENT_IP - String ip="
                                + ip);
                }
            }
            if (ip == null || ip.length() == 0
                    || "unknown".equalsIgnoreCase(ip)) {
                ip = request.getHeader("HTTP_X_FORWARDED_FOR");
                if (logger.isInfoEnabled()) {
                    logger.info(
                        "getIpAddress(HttpServletRequest) - HTTP_X_FORWARDED_FOR - String ip="
                                + ip);
                }
            }
            if (ip == null || ip.length() == 0
                    || "unknown".equalsIgnoreCase(ip)) {
                ip = request.getRemoteAddr();
                if (logger.isInfoEnabled()) {
                    logger.info(
                        "getIpAddress(HttpServletRequest) - getRemoteAddr - String ip="
                                + ip);
                }
            }
        } else if (ip.length() > 15) {
            String[] ips = ip.split(",");
            for (int index = 0; index < ips.length; index++) {
                String strIp = (String) ips[index];
                if (!("unknown".equalsIgnoreCase(strIp))) {
                    ip = strIp;
                    break;
                }
            }
        }
        return ip;
    }
}

控制层:

@RequestMapping("/getAnswer.htm")
    public void getAnswer(HttpServletRequest request,
            HttpServletResponse response) throws UnsupportedEncodingException {
        PostMethod method = new PostMethod(ydUrl);
        try {
            String wt = "hello";
            String id = "123456789";

            method.addParameter("question", wt);
            method.addParameter("id", id);
            method.getParams().setParameter(
            HttpMethodParams.HTTP_CONTENT_CHARSET, "utf-8");
            
**主要代码块**

>  			String requestIp = ClientUtils.getIpAddress(request);
>			 if (ClientUtils.getClient(requestIp) == null) {
>                 HttpClient client = new HttpClient();
>                 //将原来写入postman中的form-data数据放入Map中
>                 client.executeMethod(method);
>                 ClientUtils.addClient(requestIp, client);
>                 ClientUtils.getClient(requestIp);
>             } else {
>                 HttpClient client = (HttpClient) ClientUtils
>                         .getClient(requestIp);
>                 client.executeMethod(method);
>             }

            

byte[] response1 = method.getResponseBody();
            //获取请求后的响应体
            String result1 = new String(response1, "UTF-8");
            logger.error("result1" + result1);
            this.writeAjaxObject(response, result1);
        } catch (IOException ex) {
            logger.info("推送请求出错{}" + ex.getMessage());
        } finally {
            //释放连接
            method.releaseConnection();
        }
    }

你可能感兴趣的:(Java,HttpClient复用)