一、引入
cookie 是将服务器端的数据保存到浏览器端的技术,当用户再次请求服务器时,将浏览器端存储的数据带到服务器。
二、Cookie的创建及读取
创建Cookie
package com.jingxin.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/SetCookieServlet")
public class SetCookieServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//创建Cookie
Cookie cookie = new Cookie("name", "jingxin");
//通知服务器保存Cookie
response.addCookie(cookie);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
服务器获取浏览器发送过来的Cookie
package com.jingxin.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/GetCookieServlet")
public class GetCookieServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取浏览器发送过来的Cookie
Cookie[] cookies = request.getCookies();
//判断是否有Cookie
if(cookies!=null) {
//遍历Cookie
for(Cookie cookie : cookies) {
String name = cookie.getName();
String value = cookie.getValue();
//do something with name and value
response.getWriter().append("cookie:"+name+" "+value);
}
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
三、Cookie的持久化
1、设置Cookie的有效时间(会将Cookie保存在硬盘)
cookie.setMaxAge(int expiry);
expir 为cookie的有效时间 单位为秒,若为负数表示浏览器不保存Cookie,若为0表示删除同名Cookie
若未设置cookie的有效时间,cookie只保存在内存中,浏览器关闭时cookie也会随之删除
四、Cookie 的路径问题
客户端在保存Cookie时除了保存Cookie的名字和值,还会保存当前Cookie所在的目录,通过request。getCookies()方法只能获得当前Servlet所在目录的Cookie以及之前目录中的Cookie。
举例:假设当前Servlet所在目录为/demo1/a/b/AServlet 则利用request.getCookies()可以获得demo1、a、b目录下的Cookie
可以利用cookie.setPaht()和cookie.getPath()来设置和获取cookie的访问路劲。