CookieUtils

package cn.itcast;

import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;

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

/**
 * 类说明:使用cookie实现浏览历史记录
 * 
 * @author 作者: LiuJunGuang
 * @version 创建时间:2011-10-31 下午04:16:02
 */
public class CookieUtils {
	/**
	 * Cookie的名字
	 */
	public static final String COOKIE_HISTORYID = "cookies_history";
	/**
	 * Cookie的存活时间
	 */
	public static final int COOKIE_LIFE_TIME = 14 * 24 * 60 * 60;
	/**
	 * 最大的浏览历史记录条数
	 */
	public static final int HISTORY_COUNT = 5;

	/**
	 * 获得指定cookie中的值
	 * 
	 * @param request
	 * @param cookieName
	 *            要查找的cookie的名字
	 * @return 返回指定Cookie中的字符串值
	 */
	public static String getCookie(HttpServletRequest request, String cookieName) {

		Cookie cookies[] = request.getCookies();
		if (cookies != null) {
			for (Cookie cookie : cookies) {
				// 找到指定的cookie
				if (cookie != null && COOKIE_HISTORYID.equals(cookie.getName())) {
					return cookie.getValue();
				}
			}
		}
		return null;
	}

	/**
	 * 设置指定cookie中的值(1.得到原先cookie中的值;2.重新设置cookie的值;3.保存重置后的cookie)
	 * 
	 * @param request
	 * @param response
	 * @param cookieName
	 *            要设置的cookie的名字
	 * @param goodsid
	 *            要添加到浏览历史中的 goodsID号
	 * @param count
	 *            总共可以显示的历史记录条数
	 */
	public static void setCookie(HttpServletRequest request,
			HttpServletResponse response, String cookieName, String goodsid,
			int count) {
		// 得到指定的cookie
		String ids = getCookie(request, cookieName);
		// 设置cookie中格的浏览记录
		ids = setValue(ids, goodsid, count);
		// 保存cookie
		saveCookie(request, response, cookieName, ids);
	}

	// 测试方法
	public static void main(String[] args) {
		System.out.println(setValue(null, "1", 3));
		System.out.println(setValue("1,2,3", "1", 3));
		System.out.println(setValue("2,1,3", "1", 3));
		System.out.println(setValue("2,1", "1", 3));
		System.out.println(setValue("2,3,4", "1", 3));
		System.out.println(setValue("2,4", "1", 3));
		System.out.println(setValue("4,3,1", "1", 3));
	}

	/**
	 * 设置浏览历史字符串
	 * 
	 * @param ids
	 * @param sbookid
	 *            最新浏览的id号
	 * @return 修改后的字符串
	 */
	private static String setValue(String ids, String bookid, int count) {
		// 1、 没有任何记录--》直接添加 id
		// 2、 1,2,3 4--》 4,1,2
		// 3、 1,2,3 2 --》 2,1,3
		// 4、1,2 3--》 3,1,2
		// 如果不存在Cookie或者Cookie中没有值
		StringBuffer sb = new StringBuffer();
		if (ids == null) {
			sb.append(bookid);
		} else {
			List<String> list = Arrays.asList(ids.split("\\,"));
			LinkedList<String> idsList = new LinkedList<String>(list);
			// 未浏览过
			if (!idsList.contains(bookid)) {
				if (idsList.size() < count) {
					idsList.addFirst(bookid);
				} else {
					idsList.removeLast();
					idsList.addFirst(bookid);
				}
			} else {
				// 如果包含已浏览的
				idsList.remove(bookid);
				idsList.addFirst(bookid);
			}
			for (String id : idsList) {
				sb.append(id).append(",");
			}
			if (sb != null && sb.length() > 0) {
				sb.deleteCharAt(sb.length() - 1);
			}
		}
		return sb.toString();
	}

	/**
	 * 保存cookie的值
	 * 
	 * @param request
	 * @param response
	 * @param cookieName
	 *            要保存的cookie的名字
	 * @param value
	 *            保存到cookie中的值
	 */
	public static void saveCookie(HttpServletRequest request,
			HttpServletResponse response, String cookieName, String value) {
		saveCookie(request, response, cookieName, value, COOKIE_LIFE_TIME);
	}

	/**
	 * 删除指定的cookie
	 * 
	 * @param request
	 * @param response
	 * @param cookieName
	 *            要删除的cookie
	 */
	public static void deleteCookie(HttpServletRequest request,
			HttpServletResponse response, String cookieName) {
		saveCookie(request, response, cookieName, "", 0);
	}

	/**
	 * 保存cookie 并设置cookie存活的时间
	 * 
	 * @param request
	 * @param response
	 * @param cookieName
	 *            要保存的cookie的名字
	 * @param value
	 *            cookie中要存放的值
	 * @param time
	 *            cookie存活时间
	 */
	public static void saveCookie(HttpServletRequest request,
			HttpServletResponse response, String cookieName, String value,
			int time) {
		Cookie cookie = new Cookie(cookieName, value);
		cookie.setMaxAge(time);// 设置Cookie的存活时间
		cookie.setPath(request.getServletContext().getContextPath());
		response.addCookie(cookie);// 保存cookie
	}
}

你可能感兴趣的:(String,list,Cookies,测试,null,Class)