1、What:
Cookie是Web会话跟踪中的一种技术,其中还要Session,URL重写。
Cookie是将服务器中的一小部分加密后的用户信息放到浏览器的缓存中,Cookie最大的存储为4kb
2、How
创建Cookie的方式有:
1、通过构造器,并在通过response.addCookie(Cookie cookie)方法设置到响应头中
Cookie cookie=new Cookie(String name,String value);
resp.addCookie(cookie);
2、通过获取当前请求的Cookie值,修改Cookie的Value,在通过response.addCookie(Cookie cookie)方法设置到响应头中
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{
Cookie cookie=null;
Cookie[] cookies = req.getCookies();
for(int i=0;i<cookies.length;i++){
cookie=cookie[i];
}
cookie.setValue("nweValue");
resp.addCookie(cookie);
req.getRequestDispatcharServlet("/cookie.jsp").forword(req,resp);
}
3、在浏览器中按F12后者按组合键(ctrl+shift+j)调出控制台,观察
最开始的时候项目启动后Servlet会默认分配一个
后面我们通过请求,修改默认的value,并添加自己的一个Cookie
可以看到Request Heads中,在请求的时候是以 Cookie:JSESSIONID=value 的形式发送请求的,在响应的Response Headers中可以看到服务器返回告诉浏览器要保存Cookie的信息,如果在浏览器的缓存中已经存在有服务器返回的相同的key值,会覆盖掉原本的value值,浏览器缓存机制有点类似String的常量池存储特点,然后下次请求也会以Cookie :JSESSIONID=value 的形式发送请求
代码处理如下:
package com.cookie.demo;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class CookieServlet extends HttpServlet {
/**
*
*/
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{
Cookie[] cookies = req.getCookies();
if(null!=cookies){
Cookie cookie1=null;
String cValue=null;
for(int i=0; i<cookies.length;i++){
System.out.println(cookies[i]);
System.out.println("Comment:"+cookies[i].getComment());
System.out.println("Domain:"+cookies[i].getDomain());
System.out.println("MaxAge:"+cookies[i].getMaxAge());
System.out.println("Name:"+cookies[i].getName());
System.out.println("Path:"+cookies[i].getPath());
System.out.println("Value:"+cookies[i].getValue());
System.out.println("Class:"+cookies[i].getClass());
cookie1=cookies[i];
}
cookie1.setValue("HaHa");
cValue = cookie1.getValue();
System.out.println("修改值:"+cValue);
cookie1.setMaxAge(30);
Cookie cookie2 = new Cookie("k1", "v1");
cookie2.setMaxAge(-1);
resp.addCookie(cookie1);
resp.addCookie(cookie2);
req.getRequestDispatcher("/cookie.jsp").forward(req, resp);
}else{
Cookie cookie = new Cookie("key2", "v2");
resp.addCookie(cookie);
req.getRequestDispatcher("/cookie.jsp").forward(req, resp);
}
}
protected void doPost(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {
}
}
Cookie中常用的方法有:
//设置生命周期
cookie.setMaxAge(int second);
//修改新的值
cookie.setValue(String newValue);
//获取JSESSIONID
cookie.getName();
//获取Value
//设置访问路径
cookie.setPath(String uri)