将浏览器与web服务器之间多次交互当作一个整体来处理,并且将 多次交互所涉及的数据(即状态)保存下来。
方式一: 将状态保存在浏览器端(Cookie)。
方式二: 将状态保存在服务器端(Session)。
服务器临时存放在浏览器端的少量数据,用于跟踪用户的状态。
注:
当浏览器第一次访问服务器时,服务器可以将少量数据
以set-cookie消息头的形式发送给浏览器,浏览器会将这些
数据临时保存下来。
当浏览器再次访问服务器时,会将这些数据以cookie消息头
的形式发送给服务器。
Cookie c = new Cookie(String name,String value);
response.addCookie(c);
Cookie[] request.getCookies();
注:
该方法有可能返回null。
String cookie.getName();
String cookie.getValue();
默认情况下,浏览器会将cookie保存在内存里面,浏览器如果关闭,则 cookie会被删除。可以调用setMaxAge方法来设置cookie的生存时间。
cookie.setMaxAge(int seconds);
注:
单位是秒。
seconds > 0: 浏览器会将cookie保存在硬盘上。超过指定的
时间,cookie会被删除(失效)。
seconds < 0: 默认情况(将cookie保存在内存里面)。
seconds = 0: 删除cookie。
比如,要删除一个名称为"username"的cookie:
Cookie c = new Cookie("username","");
c.setMaxAge(0);
response.addCookie(c);
a.什么是cookie的编码问题?
cookie只能存放合法的ascii字符,对于非ascii字符(比如中文)
需要转换成对应的ascii字符的形式。
b.如何解决?
添加cookie时,使用encode方法对要添加的字符串进行编码,
读取cookie时,使用decode方法来解码。
String URLEncoder.encode(String str,String charset);
String URLDecoder.decode(String str,String charset);
建议:
在添加cookie时,不管是否是ascii字符,
统一使用encode方法来编码。
a.什么是cookie的路径问题?
浏览器在访问服务器时,会比较请求路径是否与cookie的路径
匹配,只有匹配条件的cookie才会被发送出去。
b.cookie默认路径
cookie的默认路径等于添加该cookie的web组件的路径。
比如,/servlet07/biz01/addCookie.jsp添加了一个cookie,
则该cookie默认路径就是"/servlet07/biz01"
c.匹配规则
请求路径要么等于cookie的路径,要么是cookie的子路径,
该cookie才会被发送。
比如,cookie的路径是"/servlet07/biz01",则:
请求地址是/servlet07/findCookie1.jsp,则cookie不会被发送;
请求地址是/servlet07/biz01/findCookie2.jsp,会发送;
请求地址是/servlet07/biz01/sub/findCookie3.jsp,会发送。
d.如何修改cookie的路径?
cookie.setPath(String path);
写一个Servlet,该Servlet先查看有没有一个名称为"cart"的cookie, 如果有,则显示该cookie的值; 如果没有,则添加该cookie。