首先要了解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. POJ1860 Currency Exchange(bellman-ford)

    链接:http://poj.org/problem?id=1860 Currency Exchange Description Several currency exchange points are ...

  2. 让代码重构渐行渐远系列(3)——string.Equals取代直接比较与非比较

    重构背景及原因 最近由于项目组的人员在不断扩充,导致项目中代码风格各异,大有百花齐放甚至怒放之势.考虑到团队的生存与发展,经过众人多次舌战之后,最终决定项目组根据业务分成几个小分队,以加强团队管理与提 ...

  3. XMLHTTPRequest对象的创建与浏览器的兼容问题

    MLHttpRequest 对象是AJAX功能的核心,要开发AJAX程序必须从了解XMLHttpRequest 对象开始. 了解XMLHttpRequest 对象就先从创建XMLHttpRequest ...

  4. PHP文件相关的操作函数——目录操作

    1.有关文件类型的函数 PHP是以UNIX的文件系统为模型的,因此在Windows系统中我们只能获得“file”.“dir”或者“unknown”三种文件类型.而在UNIX系统中,我们可以获得“blo ...

  5. 基于 Asp.Net的 Comet 技术解析

    Comet技术原理 来自维基百科:Comet是一种用于web的技术,能使服务器能实时地将更新的信息传送到客户端,而无须客户端发出请求,目前有两种实现方式,长轮询和iframe流. 简单的说是一种基于现 ...

  6. [SQLServer大对象]——FileTable从文件系统迁移文件

    阅读导航 从文件系统中迁移文件到FileTable 批量加载文件到FileTable 如何批量加载文件到FileTable 通过博文[SQLServer大对象]——FileTable初体验,已经可以将 ...

  7. Azure PowerShell (2) 修改Azure订阅名称

    <Windows Azure Platform 系列文章目录> Update: 2016-01-11 笔者文档主要都是用Azure PowerShell 0.x版本来实现的,比如0.98版 ...

  8. [视频],花一分钟来看看Worktile是如何为团队协作而生的

    团队协作,我们想的更深.更远.更多,花一分钟来看看我们特别奉献的故事,然后去注册一个账号,邀请小伙伴一起来工作,你会体会Worktile才是真正懂你的协作方式. 我们想做的百年公司还有很多的路,这一站 ...

  9. WCF:传输EntityFramework 实体类的POCO 代理

    WCF传输EntityFramework 实体类的POCO 代理 Windows Communication Foundation (WCF) 不能对代理进行直接序列化或反序列化,因为 DataCon ...

  10. jQuery AJAX 网页无刷新上传示例

    新年礼,提供简单.易套用的 jQuery AJAX 上传示例及代码下载.后台对文件的上传及检查,以 C#/.NET Handler 处理 (可视需要改写成 Java 或 PHP). 有时做一个网站项目 ...