首先要了解cookie必须得先了解http协议,,Cookie是http协议指定的,先由服务器保存cookie到浏览器,在下次浏览器请求服务器时把上次请求得到的cookie归还给服务器,cookie以键值对的形式保存在本地的缓存中.

  • HTTP协议规定:
    1. 1个cookie最大4kb
    2. 一个服务器最多向一个浏览器保存20个cookie
    3. 一个浏览器最多保存300个cookie

注意,不同浏览器还是略有差异,不是所有浏览器都老老实实的遵守这个规定.

  • cookie的用途举例:

    • 服务器使用cookie来跟踪客户端状态
    • 保存购物车
    • 显示上一次的登录名
  • Cookie的保存与获取:

我们在a.jsp中保存一个coookie,然后在b.jsp中获取到这个cookie,并遍历出来(因为比较简单,这里只提供代码部分):

//a.jsp的body部分
<%
Cookie cookie1=new Cookie("name","wang");
response.addCookie(cookie1);
Cookie cookie2=new Cookie("password","");
response.addCookie(cookie2); %> //b.jsp的body部分
<%
Cookie[] cookie1=request.getCookies();
for(Cookie c:cookie1){
out.print(c.getName()+":"+c.getValue()+"<br>"); } %>
  • Cookie的存活时间(setMaxAge()方法):

  当服务器创建Cookie对象后,可以调用setMaxAge()方法设置Cookie的最大生命。

    • maxAge > 0:表示Cookie在客户端硬盘上保存的最大时间,单位为秒,如cookie.setMaxAge(60)表示该cookie对象的存活时间为60秒
    • maxAge < 0:表示Cookie不会被浏览器保存到硬盘上,而只在浏览器内存中存活,一旦客户端关闭浏览器在,那么Cookie就消失;
    • maxAge == 0:表示删除Cookie,例如客户端硬盘已经存在名为abc的Cookie,如果服务器再向客户端发送名为abc,并且maxAge为0的Cookie,那么表示删除客户端上的名为abc的Cookie。
  • Cookie的路径(path):

设置cookie的路径需要用到cookie.setPath(String path)方法.例如:cookie.setPath("/cookie1/a");

如果没有设置cookie的路径,那么cookie的路径默认为是当前资源所在的路径,例如:

    • 访问http://localhost:8080/MyCookieDemo/cookie1/AServlet时保存了一个cookie,那么它的默认路径就是/MyCookieDemo/cookie1
    • 访问http://localhost:8080/MyCookieDemo/cookie1/demo1/BServlet时保存了一个cookie,那么它的默认路径就是/MyCookieDemo/cookie1/demo1

了解完了cookie的path,那么问题来了,它的用处是什么呢?这玩意有毛用?

    假设现在有WEB应用A,向客户端发送了10个Cookie,这就说明客户端无论访问应用A的哪个Servlet都会把这10个Cookie包含在请求中!这是不科学的,因为也许只有AServlet需要读取请求中的Cookie,而其他Servlet根本就不会获取请求中的Cookie。这说明客户端浏览器有时发送这些Cookie是多余的,这时候就可以通过设置Cookie的path来指定浏览器在访问什么样的路径时,包含什么样的Cookie。

    请求路径如果包含了Cookie路径,那么会在请求中会包含这个Cookie,否则请求中不会包含这个Cookie。如果某cookie的路径是/myCookieDemo/cookie1;当我们访问http://localhost:8080/myCookieDemo/index.jsp时,请求头中就不会携带这个cookie,而如果访问的是http://localhost:8080/myCookieDemo/cookie1/index.jsp时,请求头中就会包含这个cookie,这个页面也就能获取到此cookie中保存的数据.

  • Cookie保存中文

    Cookie的name和value都是不能保存中文的,但可以先把中文转换成URL编码,然后在保存到Cookie的name和value中。下面是代码Demo:

String name = "姓名";
String value = "张三";
name = URLEncoder.encode(name, "utf-8");
value = URLEncoder.encode(value, "utf-8"); Cookie c = new Cookie(name, value);
response.addCookie(c); //在获取Cookie时,再使用URL解码即可。
Cookie[] cs = request.getCookies();
if(cs != null) {
for(Cookie c : cs) {
String name = URLDecoder.decode(c.getName(), "utf-8");
String value = URLDecoder.decode(c.getValue(), "utf-8");
System.out.println(name + "=" + value);
}
}

重温Servlet学习笔记--Cookie对象的更多相关文章

  1. 重温Servlet学习笔记--session对象

    session的类型是属于HttpSession,HttpSession是由javaWeb提供的,用来会话跟踪的类.session是服务器端对象,保存在服务器端. HttpSession是servle ...

  2. 重温Servlet学习笔记--request对象

    request和response是一对搭档,一个负责请求一个负责响应,都是Servlet.service()方法的参数,response的知识点前面梳理过了,这里只说一下request,在客户端发出每 ...

  3. 重温Servlet学习笔记--response对象

    在用户浏览网页时,服务器对于客户端浏览器做出的响应被封装成一个HttpServletResponse对象,要对浏览器操作只需要操作这个response对象即可.response的功能分类及介绍: 响应 ...

  4. 重温Servlet学习笔记--servletContext对象

    一个项目中只有一个ServletContext对象,我们可以在多个servlet中获取这个唯一的对象,使用它可以给多个servlet传递数据,我们通常成servletContext为上下文对象.这个对 ...

  5. 重温Servlet学习笔记--编码问题

    在说编码问题之前,首先先了解一下常见的字符编码: ISO-8859-1:  拉丁编码,不支持中文 gbk,gb2312,gb18030:系统默认编码,是中国的国标码 utf-8: 支持几乎所有语言的编 ...

  6. # jsp及servlet学习笔记

    目录 jsp及servlet学习笔记 JSP(Java Server Page Java服务端网页) 指令和动作: servlet(小服务程序) jsp及servlet学习笔记 JSP(Java Se ...

  7. Servlet学习笔记(四)

    目录 Servlet学习笔记(四) 一.会话技术Cookie.session 1. 什么是会话技术? 2. 会话技术有什么用? 3. Cookie 3.1 什么是Cookie? 3.2 使用Cooki ...

  8. Servlet学习笔记(三)

    目录 Servlet学习笔记(三) 一.HTTP协议 1.请求:客户端发送欸服务器端的数据 2.响应:服务器端发送给客户端的数据 3.响应状态码 二.Response对象 1.Response设置响应 ...

  9. Servlet学习笔记(二)

    目录 Servlet学习笔记(二) Request对象 1.request和response对象: 2.request对象继承体系结构: 3.什么是HttpServletRequest ? 4.Htt ...

随机推荐

  1. myeclipse连接数据库sql server

    1.打开数据库Microsoft sql server2008,输入以下命令: 此时可是看到端口号为1619,记住此端口号,等会儿会用到. 2.打开myeclipse2014,找到最上方的myecli ...

  2. CoolPlist 帧动画自动生成工具

    工具英文名称:CoolPlist作者: 陈前帆 thinkingMan | sonny 邮箱: 625936034@qq.com | chenqianfan1@163.com电话: 136704713 ...

  3. linux内核分析作业8:理解进程调度时机跟踪分析进程调度与进程切换的过程

    1. 实验目的 选择一个系统调用(13号系统调用time除外),系统调用列表,使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用 分析汇编代码调用系统调用的工作过程,特别是参数的传递的方 ...

  4. linux内核分析作业5:分析system_call中断处理过程

    1.增加 Menu 内核命令行 调试系统调用. 步骤:删除menu git clone        (tab) make rootfs 这就是我们将 fork 函数写入 Menu 系统内核后的效果, ...

  5. IOS_反射

    // // PJReflect.m // 新浪微博 // // Created by pj on 14-8-8. // Copyright (c) 2014年 pj. All rights reser ...

  6. ASP.NET Core Kestrel 中使用 HTTPS (SSL)

    在ASP.NET Core中,如果在Kestrel中想使用HTTPS对站点进行加密传输,可以按照如下方式 申请证书 这一步就不详细说了,有免费的和收费的,申请完成之后会给你一个*.pfx结尾的文件. ...

  7. 性能分析工具-PerfView

    Roslyn的PM(程序经理) Bill Chiles,Roslyn使用纯托管代码开发,但性能超过之前使用C++编写的原生实现,这有什么秘诀呢?他最近写了一篇文章叫做<Essential Per ...

  8. RazorEngine 3.3 在Mono 3.2上正常运行

    RazorEngine 是一个简化的模板引擎基于微软新的Razor 解析引擎, Razor是在 ASP.NET MVC3 和 Web Pages中引入的.RazorEngine 提供了一个外包装和额外 ...

  9. 自己动手模拟开发一个简单的Web服务器

    开篇:每当我们将开发好的ASP.NET网站部署到IIS服务器中,在浏览器正常浏览页面时,可曾想过Web服务器是怎么工作的,其原理是什么?“纸上得来终觉浅,绝知此事要躬行”,于是我们自己模拟一个简单的W ...

  10. [nRF51822] 9、基础实验代码解析大全 · 实验12 - ADC

    一.本实验ADC 配置 分辨率:10 位. 输入通道:5,即使用输入通道AIN5 检测电位器的电压. ADC 基准电压:1.2V. 二.NRF51822 ADC 管脚分布 NRF51822 的ADC ...