/* ================================================================== * Created [2009-4-27 下午11:32:55] by Jon.King * ================================================================== * TSS * ================================================================== * mailTo:jinpujun@hotmail.com * Copyright (c) Jon.King, 2009-2012 * ================================================================== */ package com.jinhe.tss.core.web.wrapper; import java.util.HashSet; import java.util.Set; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponseWrapper; /** * <p> * AvoidRepeatHttpServletResponseWrapper.java * </p> * <p> * 防重复的Http请求响应对象:不能添加同名Cookie信息。 * 比如:合并http请求的情况,合并后的http请求只需返回一个response响应即可。 * * 小知识:浏览器客户端是以domain,path,name作为Cookie的唯一标识的, * 只要Name、Domain、Path中的任何一项不同,Cookie就是不同的,由此便产生了同名Cookie。 * 如下面三个名为d的cookie是可以共存的 * d=1; expires=Sat, 23 May 2009 03:48:22 GMT; path=/; domain=.dny.com d=2; expires=Sat, 23 May 2009 03:48:46 GMT; path=/; domain=.test.dny.com d=3; expires=Sat, 23 May 2009 03:48:46 GMT; path=/test/; domain=.dny.com * * </p> */ public class AvoidRepeatHttpServletResponseWrapper extends HttpServletResponseWrapper { /** * 已经添加的Cookie名集合 */ private Set<String> cookies = new HashSet<String>(); /** * 构造函数 * * @param response */ public AvoidRepeatHttpServletResponseWrapper(HttpServletResponse response) { super(response); } /** * <p> * 向Response中添加Cookie信息,同名Cookie不能重复添加 * </p> */ public void addCookie(Cookie cookie) { if (!cookies.contains(cookie.getName())) { super.addCookie(cookie); cookies.add(cookie.getName()); } } }