一、 Cookie的创建
代码示例:(addCookie)不能省略
public class CookieServlet extends BeanServlet {
protected void creatCookie(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//1.创建 Cookie对象
Cookie cookie=new Cookie();
//2.通知客户端保存cookie;
resp.addCookie(cookie);
}
}
二、服务器获取客户端的Cookie
1)开发时一般创一个Cookie工具类CookieUtils去查找指定名称的Cookie对象
public class CookieUtils {
/**
* 查找指定名称的Cookie对象
* @param name
* @param cookies
* @return
*/
public static Cookie findCookie(String name , Cookie[] cookies){
if (name == null || cookies == null || cookies.length == 0) {
return null;
}
for (Cookie cookie : cookies) {
if (name.equals(cookie.getName())) {
return cookie;
}
}
return null;
}
}
2)获取全部的cookie只需一行代码
获取所有的Cookie值
Cookie[] cookies= req.getCookies();
三、Cookie值的修改
1)方案一:
- 先创建一个要修改的同名(指的就是 key)的 Cookie 对象
- 在构造器,同时赋于新的 Cookie 值。
- 调用 response.addCookie( Cookie );
2)方案二:
- 先查找到需要修改的 Cookie 对象
- 调用 setValue()方法赋于新的 Cookie 值。
- 调用 response.addCookie()通知客户端保存修改
// 方案一:
// 1、先创建一个要修改的同名的 Cookie 对象
// 2、在构造器,同时赋于新的 Cookie 值。
Cookie cookie = new Cookie("key1","newValue1");
// 3、调用 response.addCookie( Cookie ); 通知 客户端 保存修改
resp.addCookie(cookie);
// 方案二:
// 1、先查找到需要修改的 Cookie 对象
Cookie cookie = CookieUtils.findCookie("key2", req.getCookies());
if (cookie != null) {
// 2、调用 setValue()方法赋于新的 Cookie 值。
cookie.setValue("newValue2");
// 3、调用 response.addCookie()通知客户端保存修改
resp.addCookie(cookie);
}
四、Cookie的生命周期
Cookie 的生命控制指的是如何管理 Cookie 什么时候被销毁(删除)
设置生命周期的方法 --setMaxAge()
- 正数,表示在指定的秒数后过期
- 负数,表示浏览器一关,Cookie 就会被删除(默认值是-1)
- 零,表示马上删除 Cookie
示例代码:
protected void defaultLife(HttpServletRequest req, HttpServletResponse resp) throws ServletException,
IOException {
Cookie cookie = new Cookie("defalutLife","defaultLife");
cookie.setMaxAge(-1);//设置存活时间
resp.addCookie(cookie);
}
五、Cookie 有效路径 Path 的设置
Cookie 的 path 属性可以有效的过滤哪些 Cookie 可以发送给服务器。哪些不发。
path 属性是通过请求的地址来进行有效的过滤。
CookieA path=/工程路径
CookieB path=/工程路径/abc
请求地址如下:
http://ip:port/工程路径/a.html
CookieA 发送 CookieB 不发送
http://ip:port/工程路径/abc/a.html
CookieA 发送
CookieB 发
protected void testPath(HttpServletRequest req, HttpServletResponse resp) throws ServletException,
IOException {
Cookie cookie = new Cookie("path1", "path1");
// getContextPath() ===>>>> 得到工程路径
cookie.setPath( req.getContextPath() + "/abc" ); // ===>>>> /工程路径/abc
resp.addCookie(cookie);
resp.getWriter().write("创建了一个带有 Path 路径的 Cookie");
}