Cookie的存取

package com.util;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.util.concurrent.CountDownLatch;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.httpclient.DefaultHttpMethodRetryHandler;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.params.HttpMethodParams;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.concurrent.FutureCallback;
import org.apache.http.impl.nio.client.DefaultHttpAsyncClient;
import org.apache.http.nio.client.HttpAsyncClient;
import org.apache.log4j.Logger;

/**
 * 标题: WebsConnByHttpClient 说明: 通过HttpClient 或 HttpAsyncClient 的 servlet或者Action
 * 之间的信息连接业务类              2013.03.14 NAME: wangchanglin
 * 
 * 修改信息 修改日期 修改者 修改ID 修改内容
 */
public class WebserviceAssistant {
    private static final Logger logger = Logger.getLogger(WebserviceAssistant.class);

    /**
     * Webs间的接口调用
     * 
     * @param wsURL
     *            用HttpClient所需的URL参数
     * @return restult 业务处理结果
     * @throws IOException
     **/
    public static String getResultByHttpClient(String wsURL) throws IOException {
        HttpClient httpclient = new HttpClient();
        GetMethod httpget = new GetMethod(wsURL);
        httpget.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler());

        try {
            httpclient.executeMethod(httpget);
            String result = httpget.getResponseBodyAsString();
            return result;
        } finally {
            httpget.releaseConnection();
        }
    }

    /**
     * 通过HttpClient接口获取布尔结果
     * 
     * @param reqURL
     * @throws HttpException
     * @throws IOException
     * @return true false
     */
    public static boolean getHttpClientBoolean(String reqURL) throws IOException {
        // 构造HttpClient的实例
        HttpClient httpClient = new HttpClient();
        // 创建GET方法的实例
        GetMethod getMethod = new GetMethod(reqURL);
        // 使用系统提供的默认的恢复策略
        getMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler());
        try {
            // 执行getMethod
            httpClient.executeMethod(getMethod);
            // 读取内容
            String result = getMethod.getResponseBodyAsString();
            return new Boolean(result);
        } finally {
            // 释放连接
            getMethod.releaseConnection();
        }
    }

    /**
     * Webs间的接口调用
     * 
     * @param wsURL
     *            用HttpClient所需的URL参数
     * @return restult 业务处理结果
     * @throws IOException
     **/
    public static String getResultByHttpClientThrowTimeOut(String wsURL) throws IOException {
        HttpClient httpclient = new HttpClient();
        httpclient.getHttpConnectionManager().getParams().setConnectionTimeout(3000);
        httpclient.getHttpConnectionManager().getParams().setSoTimeout(7000);
        GetMethod httpget = new GetMethod(wsURL);
        httpget.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler());
        try {
            httpclient.executeMethod(httpget);
            String result = httpget.getResponseBodyAsString();
            return result;
        } catch (IOException e) {
            logger.error(e);
            throw e;
        } finally {
            httpget.releaseConnection();
        }
    }

    /**
     * Webs间的接口调用 HttpClient 的异步调用实现
     * 
     * @param wsURL
     *            用HttpClient所需的URL参数
     * @throws IOException
     * @throws InterruptedException
     **/
    public static void getResultAsynByHttpClient(String wsURL) throws IOException, InterruptedException {
        HttpAsyncClient httpclient = new DefaultHttpAsyncClient();
        httpclient.start();
        HttpGet[] requests = new HttpGet[] { new HttpGet(wsURL), };
        final CountDownLatch latch = new CountDownLatch(requests.length);
        try {
            for (final HttpGet request : requests) {
                httpclient.execute(request, new FutureCallback<HttpResponse>() {

                    @Override
                    public void completed(final HttpResponse response) {
                        latch.countDown();
                    }

                    @Override
                    public void failed(final Exception ex) {
                        latch.countDown();
                        ex.printStackTrace();
                    }

                    @Override
                    public void cancelled() {
                        latch.countDown();
                    }

                });
            }
        } finally {
            latch.await();
            httpclient.shutdown();
        }
    }

    /**
     * 获取客户端真实IP<br/>
     * 解决多重转发获取假IP问题
     * 
     * @param request
     *            HttpServletRequest
     * @return 客户端真实IP
     */
    public static String getIpAddr(HttpServletRequest request) {
        String ip = request.getHeader("x-forwarded-for");
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("Proxy-Client-IP");
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("WL-Proxy-Client-IP");
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getRemoteAddr();
        }
        return ip;
    }

    /**
     * 添加指定名字的cookie值
     * 
     * @param response
     *            HttpServletResponse
     * @param cookieName
     *            cookie名
     * @param cookieValue
     *            cookie值
     * @throws UnsupportedEncodingException
     */
    public static void addCookieByName(HttpServletResponse response, String cookieName, String cookieValue) throws UnsupportedEncodingException {
        String utf = URLDecoder.decode(cookieValue, "utf-8");
        Cookie cookie = new Cookie(cookieName, utf);
        cookie.setVersion(1);
        // cookie.setMaxAge(60 * 60 * 24 * 7);// 默认1周内有效
        cookie.setMaxAge(60 * 10);// 10分钟有效
        cookie.setDomain(ConstUtil.CJTCDOMAINURL);
        cookie.setPath("/");
        response.setHeader("P3P", "CP='IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT'");
        response.addCookie(cookie);
    }

    /**
     * 删除指定名字的cookie值
     * 
     * @param request
     *            HttpServletRequest
     * @param response
     *            HttpServletResponse
     * @param cookieName
     *            cookie名
     */
    public static void deleteCookieByName(HttpServletResponse response, String cookieName) {
        Cookie cookie = new Cookie(cookieName, "");
        cookie.setMaxAge(0);
        cookie.setDomain(ConstUtil.CJTCDOMAINURL);
        cookie.setPath("/");
        response.setHeader("P3P", "CP='IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT'");
        response.addCookie(cookie);
    }

    /**
     * 获取指定名字的cookie
     * 
     * @param request
     *            HttpServletRequest
     * @param cookieName
     *            cookie名
     * @return cookie值
     */
    public static String getCookieValueByName(HttpServletRequest request, String cookieName) {
        Cookie[] cookies = request.getCookies();
        if (cookies != null) {
            for (Cookie cookie : cookies) {
                // cookie.setDomain(ConstUtil.CJTCDOMAINURL);
                // cookie.setPath("/");
                if (cookie != null && cookieName.equals(cookie.getName())) {
                    logger.debug("cookie.getName():" + cookie.getName() + "	cookie.getValue():" + cookie.getValue() + "	cookie.getDomain():" + cookie.getDomain()
                            + "	cookie.getPath():" + cookie.getPath());
                    return cookie.getValue();
                }
            }
        }
        return null;
    }

    
}
原文地址:https://www.cnblogs.com/lbangel/p/3526835.html