/* ==================================================================
* 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());
}
}
}