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); } }
运行结果: