最近在看自己项目的http无状态下如何实现购物车功能的,发现对cookie的处理。这个工具类或许能对以后自己提供些车轮,我就先放上来供以后参考。后面我会陆续写出什么是http请求无状态,项目中都有那些方案可以解决无状态请求下的购物车逻辑。
本工具类包含:保存cookie,获取cookie,删除cookie,以及获取请求地址这几个方法
import java.util.HashMap;
import java.util.Map;
import java.util.Random;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.lang.StringUtils;
/**
* cookie操作
* @author zhanglf
* @since 2019-01-20
*/
public class CookieUtils {
/**
* 获取访问URL
* @param request
* @return
*/
public static String getRequestURL(HttpServletRequest request){
StringBuffer url = new StringBuffer();
url.append("//").append(request.getServerName()).append(':').append(request.getServerPort());
url.append(request.getRequestURI());
if(request.getQueryString() != null) {
url.append("?").append(request.getQueryString());
}
return url.toString();
}
/**
* 获取Cookie值,如果没有获取到,则自动从请求参数request中获取
* @param request
* @param key
* @return
*/
public static String getCookieValue(HttpServletRequest request, String key) {
try {
Cookie[] ck = request.getCookies();
if (ck != null) {
for (Cookie cookie : ck) {
if (cookie.getName().equals(key)) {
return cookie.getValue();
}
}
}
return request.getParameter(key);// 尝试在请求参数中获取
} catch (Exception e) {
return null;
}
}
/**
* 响应Cookie到浏览器.即放到response Headers里
* @param response
* @param key
* @param value
*/
public static void addCookie(HttpServletResponse response, String key, String value) {
try {
Cookie cookie = new Cookie(key, value);
cookie.setPath("/");
response.addCookie(cookie);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 响应Cookie到浏览器,放到response Headers中
* @param response
* @param key
* @param value
*/
public static void addCookie(HttpServletResponse response, String key, String value, int maxTime) {
try {
Cookie cookie = new Cookie(key, value);
cookie.setPath("/");
cookie.setMaxAge(maxTime);
response.addCookie(cookie);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 删除指定域下的cookie
* @param response
* @param domain
* @param key
*/
public static void delC