1.Cookie技术:
客户端技术
Cookie是基于set-Cookie响应头和Cookie请求头工作的,服务器可以发送set-Cookie请求头命令浏览器保存一个cookie信息,浏览器会在访问服务器时以Cookie请求头的方式带回之前保存的信息
request.getCookies();
response.addCookie(Cookie c);
new Cookie(String name,String value)//Cookie在构造的时候就需要设定好cookie的名字和值
getName();
getValue();
setValue();
!!setMaxAge与getMaxAge方法
-- 一个Cookie如果没有设置过MaxAge则这个Cookie是一个会话级别的Cookie,这个Cookie信息打给浏览器后浏览器会将它保存在浏览器的内存中,这意味着只要浏览器已关闭随着浏览器内存的销毁Cookie信息也就消失了.一个Cookie也可以设置MaxAge,浏览一一旦发现收到的Cookie被设置了MaxAge,则会将这个Cookie信息以文件的形式保存在浏览器的临时文件夹中,保存到指定的时间到来位置.这样一来即使多次开关浏览器,由于这些浏览器都能在临时文件夹中看到cookie文件,所以在cookie失效之前cookie信息都存在.
-- 想要命令浏览器删除一个Cookie,发送一个同名同path的cookie,maxage设置为0,浏览器以名字+path识别cookie,发现同名同path,cookie覆盖后立即超时被删除,从而就删除了cookie.
!!setPath与getPath方法
-- 用来通知浏览器在访问服务器中的哪个路径及其子路径时带着当前cookie信息过来
如果不明确设置,则默认的路径是发送Cookie的Servlet所在的路径
http://localhost/Day05/servlet/...
setDomain与getDomain方法
-- 用来通知浏览器在访问哪个域名的时候带着当前的cookie信息.但是要注意,现代的浏览器一旦发现cookie设置过domain信息则会拒绝接受这个Cookie.我们平常不要设置这个方法
2.实验:
package cn.itheima.cookie;
import java.io.IOException;
import java.util.Date;
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 {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//设置编码
response.setContentType("text/html;charset=utf-8");
Cookie[] cookies = request.getCookies();
Cookie findC = null;
//遍历cookies
if(cookies!=null){
for(Cookie c:cookies){
if("last".equals(c.getName())){
findC=c;
}
}
}
if(findC==null){
response.getWriter().write("您是第一次访问,目前时间是:"+new Date().toLocaleString());
}else{
response.getWriter().write("您上次访问的时间是:"+findC.getValue()+"<br/>"+"目前时间是:"+new Date().toLocaleString());
}
//把当前时间以cookie的方式发送给浏览器-->生命周期默认是会话级别的,即会话结束cookie死亡
Date date=new Date();
Cookie last=new Cookie("last", date.toLocaleString());
response.addCookie(last);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
运行结果: