一、Cookie概述
服务器给客户端并且存在客户端(浏览器)上的一份小数据
应用场景:
自动登录、浏览记录、浏览器
为什么有这个Cookie
http的请求是无状态。 客户端与服务器在通讯的时候是无状态,其实就是客户端在第二次来访的时候,服务器根本就不知道这个客户端以前有没有来访问过。 为了更好的用户体验,更好的交互 [自动登录],其实从公司层面讲,就是为了更好的收集用户习惯[出现了大数据]。
二、Cookie应用
1. 服务器–生成一个cookie(response.addCookie())
主要是使用Cookie创建一个对象,然后对象调用addCookie()方法就可以添加。
第二次打开浏览器就会在http(客户端收到消息)中加一个 Set-Cookie:选项
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| public class Demo01 extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=utf");//response添加中文的方法
Cookie cookie=new Cookie("aa","bb"); //给响应添加一个cookie response.addCookie(cookie); response.getWriter().write("成功了!"); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
|
2. 客户端–遍历(for循环)所有的cookie(request.getCookies())
主要代码:
1 2 3 4 5 6 7 8 9 10
| Cookie[] cookies = request.getCookies(); //客户端request.getCookies获取 if(cookies !=null) { for(Cookie c:cookies) //增强for循环输出 { String value = c.getValue(); 使用get方法获取cookie的信息 String name = c.getName(); System.out.println(name+" "+value); } }
|
完整代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| public class Demo01 extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=utf");//response添加中文的方法 //方法参数要什么就给什么 //创建对象几种方法: 1. 直接new 2. 单例模式/提供静态方法 3. 工厂模式构建 StuFactory StuBuilder Cookie cookie=new Cookie("aa","bb"); //服务器端给客户端添加一个cookie response.addCookie(cookie); response.getWriter().write("成功了!"); //获取客户端带过来的cookie Cookie[] cookies = request.getCookies(); if(cookies !=null) { for(Cookie c:cookies) { String value = c.getValue(); String name = c.getName(); System.out.println(name+" "+value); } } } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
|
3. 给cookie设置有效期(setMaxAge())以及指定域名打开(setDomain)和指定路径(setPath)
3.2域名–cookie.setDomain(“.xxxx.com”)
3.3域名下的路径–cookie.setPath(“/yyy”)
两者合在一起就是给ww.xxxx.com/yyy/这个地址才可以增加cookie
主要代码如下:(已经有创建了一个cookie)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| //先写cookie对象 Cookie cookie=new Cookie("name","zhangsan"); //创建cookie的有限期 //cookie的有效期没有设置的话默认是关闭浏览器就没有了 //正值:在这个时间后就失效 //负值:默认-1.关闭浏览器就会失效 cookie.setMaxAge(60*60*24*7); //以秒为单位 //设置指定域名才会带上cookie cookie.setDomain(".larkkkkkkk.com"); //设置访问该域名下的lark路径才会带上cookie ----相当于 www.larkkkkkkk.com/lark/ cookie.setPath("/lark"); response.addCookie(cookie);//服务器response添加一个cookie
|
完整代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
| package Servlet; 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 Demo02 extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //客户端request遍历所有cookie信息 Cookie[] cookies = request.getCookies(); //request获取所有的cookie if(cookies !=null) { for (Cookie cookie :cookies) { System.out.println(cookie.getName()+" = "+cookie.getValue()); } } //先写cookie对象 Cookie cookie=new Cookie("name","zhangsan"); //创建cookie的有限期 //cookie的有效期没有设置的话默认是关闭浏览器就没有了 //正值:在这个时间后就失效 //负值:默认-1.关闭浏览器就会失效 cookie.setMaxAge(60*60*24*7); //以秒为单位 //设置指定域名才会带上cookie cookie.setDomain(".larkkkkkkk.com");
//设置访问该域名下的lark路径才会带上cookie ----相当于 www.larkkkkkkk.com/lark/ cookie.setPath("/lark"); response.addCookie(cookie);//服务器response添加一个cookie //cookie2对象 Cookie cookie2=new Cookie("age","18"); response.addCookie(cookie2);//服务器response添加一个cookie response.getWriter().write("hello Cookie..."); //响应给浏览器展示 }
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); }
}
|