cookie API:
public Cookie(String name,String value):构造函数
setValue与getValue:得到cookie的值
setMaxAge与getMaxAge:设置cookie的有效期(以秒为单位),若不设置,则cookie的有效期是浏览器进程。注:将最大时效设为0则是命令浏览器删除该cookie。(删除cookie时,path必须一致,否则不会删除)
setPath与getPath:设置cookie的有效目录。不设置,则cookie是由哪个servlet发出的,它的有效路径就是servlet所在的目录
setDomain与getDomain:设置cookie的域
getName:获得cookie的名称
案例:显示用户上次访问网站的时间,创建一个servlet:
package cn.sun;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;
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("/CookieDemo1")
public class CookieDemo1 extends HttpServlet {
private static final long serialVersionUID = 1L;
public CookieDemo1() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
PrintWriter out=response.getWriter();
out.print("您上次访问时间是:"); //print()方法输出会自动换行
//获得用户的时间cookie
Cookie cookies[]=request.getCookies(); //返回一个cookie数组
for(int i=0;cookies!=null && i<cookies.length;i++){ //遍历
if(cookies[i].getName().equals("lastAccessTime")){ //判断是不是保存时间的cookie
long cookieValue=Long.parseLong(cookies[i].getValue()); //得到用户的上次访问时间,转化成一个毫秒值
Date date=new Date(cookieValue); //用毫秒值创建一个Date对象
out.print(date.toLocaleString()); //输出
}
}
//给用户回送最新的访问时间
Cookie cookie=new Cookie("lastAccessTime",System.currentTimeMillis()+""); //创建一个保存用户最新访问时间的cookie,其值是当前的毫秒值
cookie.setMaxAge(1*30*24*3600); //设置cookie的有效期,以秒为单位
cookie.setPath("/day07"); //设置cookie的有效路径,这里访问day07应用下所有资源
response.addCookie(cookie); //把cookie写给浏览器
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}
第一次运行这个servlet:因为第一次运行,所以后面没有显示上次访问的时间
第二次运行:显示了上一次访问的时间
引申:演示删除cookie:
更改CookieDemo1这个servlet,再新建一个servlet:CookieDemo2
CookieDemo1:
package cn.sun;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;
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("/CookieDemo1")
public class CookieDemo1 extends HttpServlet {
private static final long serialVersionUID = 1L;
public CookieDemo1() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
PrintWriter out=response.getWriter();
out.print("<a href='/day07/CookieDemo2'>清除上次访问时间</a><br>");
out.print("您上次访问时间是:"); //print()方法输出会自动换行
//获得用户的时间cookie
Cookie cookies[]=request.getCookies(); //返回一个cookie数组
for(int i=0;cookies!=null && i<cookies.length;i++){ //遍历
if(cookies[i].getName().equals("lastAccessTime")){ //判断是不是保存时间的cookie
long cookieValue=Long.parseLong(cookies[i].getValue()); //得到用户的上次访问时间,转化成一个毫秒值
Date date=new Date(cookieValue); //用毫秒值创建一个Date对象
out.print(date.toLocaleString()); //输出
}
}
//给用户回送最新的访问时间
Cookie cookie=new Cookie("lastAccessTime",System.currentTimeMillis()+""); //创建一个保存用户最新访问时间的cookie,其值是当前的毫秒值
cookie.setMaxAge(1*30*24*3600); //设置cookie的有效期,以秒为单位
cookie.setPath("/day07"); //设置cookie的有效路径,这里访问day07应用下所有资源
response.addCookie(cookie); //把cookie写给浏览器
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}
CookieDemo2:
package cn.sun;
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("/CookieDemo2")
public class CookieDemo2 extends HttpServlet {
private static final long serialVersionUID = 1L;
public CookieDemo2() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Cookie cookie=new Cookie("lastAccessTime",System.currentTimeMillis()+""); //创建一个保存用户最新访问时间的cookie,其值是当前的毫秒值
cookie.setMaxAge(0); //设置cookie的有效期,以秒为单位
cookie.setPath("/day07"); //删除cookie时,path必须一致
response.addCookie(cookie); //把cookie写给浏览器
response.sendRedirect("/day07/CookieDemo1");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}
运行结果:
当我们点击清除按钮时:
这样就清除了上次访问时间,即删掉了一个cookie