重温Servlet学习笔记--Cookie对象
首先要了解cookie必须得先了解http协议,,Cookie是http协议指定的,先由服务器保存cookie到浏览器,在下次浏览器请求服务器时把上次请求得到的cookie归还给服务器,cookie以键值对的形式保存在本地的缓存中.
- HTTP协议规定:
- 1个cookie最大4kb
- 一个服务器最多向一个浏览器保存20个cookie
- 一个浏览器最多保存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对象的更多相关文章
- 重温Servlet学习笔记--session对象
session的类型是属于HttpSession,HttpSession是由javaWeb提供的,用来会话跟踪的类.session是服务器端对象,保存在服务器端. HttpSession是servle ...
- 重温Servlet学习笔记--request对象
request和response是一对搭档,一个负责请求一个负责响应,都是Servlet.service()方法的参数,response的知识点前面梳理过了,这里只说一下request,在客户端发出每 ...
- 重温Servlet学习笔记--response对象
在用户浏览网页时,服务器对于客户端浏览器做出的响应被封装成一个HttpServletResponse对象,要对浏览器操作只需要操作这个response对象即可.response的功能分类及介绍: 响应 ...
- 重温Servlet学习笔记--servletContext对象
一个项目中只有一个ServletContext对象,我们可以在多个servlet中获取这个唯一的对象,使用它可以给多个servlet传递数据,我们通常成servletContext为上下文对象.这个对 ...
- 重温Servlet学习笔记--编码问题
在说编码问题之前,首先先了解一下常见的字符编码: ISO-8859-1: 拉丁编码,不支持中文 gbk,gb2312,gb18030:系统默认编码,是中国的国标码 utf-8: 支持几乎所有语言的编 ...
- # jsp及servlet学习笔记
目录 jsp及servlet学习笔记 JSP(Java Server Page Java服务端网页) 指令和动作: servlet(小服务程序) jsp及servlet学习笔记 JSP(Java Se ...
- Servlet学习笔记(四)
目录 Servlet学习笔记(四) 一.会话技术Cookie.session 1. 什么是会话技术? 2. 会话技术有什么用? 3. Cookie 3.1 什么是Cookie? 3.2 使用Cooki ...
- Servlet学习笔记(三)
目录 Servlet学习笔记(三) 一.HTTP协议 1.请求:客户端发送欸服务器端的数据 2.响应:服务器端发送给客户端的数据 3.响应状态码 二.Response对象 1.Response设置响应 ...
- Servlet学习笔记(二)
目录 Servlet学习笔记(二) Request对象 1.request和response对象: 2.request对象继承体系结构: 3.什么是HttpServletRequest ? 4.Htt ...
随机推荐
- Xilinx下载安装与在win10闪退问题解决方法
Xilinx的14.4版本的下载链接(百度云的上传了N多次都提示失败,所以就换了360云盘上传) https://yunpan.cn/cPHKLjbX9RueM (提取码:2a5a)下载后解压到以下目 ...
- HW2016_字符串_STL_DP
一.在字符串str1中删除那些在str2中出现的字符. str2可能会有重复字符,直接遍历会导致效率低下,故先借助STL的set容器对str1查重: 然后,遍历str1和str2,对str1进行查重. ...
- CSS的定位
定位的基本思想:允许你定义元素框相对于其正常位置应该出现的位置,或者相对于父元素.另一个元素甚至浏览器窗口本身的位置 一切皆为框 div.h1 或 p 元素常常被称为块级元素 ...
- PHP的FastCGI
CGI全称是“通用网关接口”(Common Gateway Interface), 它可以让一个客户端,从网页浏览器向执行在Web服务器上的程序请求数据. CGI描述了客户端和这个程序之间传输数据的一 ...
- Ruby 里的 %Q, %q, %W, %w, %x, %r, %s, %i (译)转
原文地址 转自 %Q 用于替代双引号的字符串. 当你需要在字符串里放入很多引号时候, 可以直接用下面方法而不需要在引号前逐个添加反斜杠 (\") >> %Q(Joe said: ...
- C#_技巧:真伪随机数
使用 Random 产生随机数.(这是一种伪随机数,需要seed,同一个seed后,采用某种算法产生的数字序列都是一样的) 两种写法 错误 for(int i=0;i<100;i++) { ...
- 函数randint的使用
摘自百科: ANDINT 在MATLAB中用于产生基质的均匀分布的随机整数. 用法: 1.OUT = RANDINT 产生一个“ 0 ”或“ 1 ”等概率 2.OUT = RANDINT(M) 生成的 ...
- 在一个SQL Server表中的多个列找出最大值
在一个SQL Server表中一行的多个列找出最大值 有时候我们需要从多个相同的列里(这些列的数据类型相同)找出最大的那个值,并显示 这里给出一个例子 IF (OBJECT_ID('tempdb..# ...
- asp.net identity UserSecurityStamp 的作用
UserSecurityStamp 主要是用来对用户安全相关信息做一个快照. 在使用asp.net identity 的 CreateAsync(TUser user) 创建一个用户的时候,如果开启了 ...
- [搜索引擎]Sphinx的介绍和原理探索
What/Sphinx是什么 定义 Sphinx是一个全文检索引擎. 特性 索引和性能优异 易于集成SQL和XML数据源,并可使用SphinxAPI.SphinxQL或者SphinxSE搜索接口 易于 ...