1.状态管理
(1)什么是状态管理?
将浏览器与web服务器之间多次交互当作一个整体来处理,并且将多次交互所涉及的数据(即状态)保存下来。
(2)如何进行状态管理?
a.将状态保存在浏览器端。
Cookie技术
b.将状态保存在服务器端。
Session技术
(3)Cookie
1)什么是Cookie?
服务器临时存放在浏览器端的少量数据。这些数据用来跟踪用户的状态。
2)工作原理
当浏览器访问服务器时,服务器会将少量数据以set-cookie消息头的形式发送给浏览器,浏览器会将这些数据保存下来;
当浏览器再次访问服务器时,会将这些数据以cookie消息头的形式发送给服务器。
3)添加Cookie
Cookie c = new Cookie(String name,String value);
注:
name为cookie名,value为cookie值,要求都是String。
response.addCookie(c);
4)读取Cookie
Cookie[] request.getCookies();
注:
a. 一个Cookie对象封装了一个Cookie中的所有数据。
b. 该方法有可能返回null。
String cookie.getName();
String cookie.getValue();
5)编码问题
a.什么是编码问题?
cookie只能保存合法的ascii字符。对于中文需要编码处理,即将中文转换成合法的ascii字符串的形式。
b.如何处理?
String URLEncoder.encode(String str,String charset);
String URLDecoder.decode(String str,String charset);
c.建议
在添加cookie时,不管是否是中文,建议统一进行编码处理。
6)生存时间问题
a.默认情况下,浏览器会把cookie保存在内存里面,浏览器只要不关闭,cookie就会一直存在。浏览器闭,则cookie会被删除。
b.可以调用setMaxAge方法来设置cookie的生存时间。
cookie.setMaxAge(int seconds);
注:
单位是秒。比如保存一年 setMaxAge(365 * 24 * 60 * 60);
值可以大于0:
浏览器会将cookie保存在硬盘上(一般是以文件的形式来存放),如果超过指定的时间,cookie会被删除。
值可以小于0:
缺省值(即将cookie保存在内存里面)。
值可以等于0:
删除cookie,比如要删除一个名称为city的cookie:
Cookie c = new Cookie("city","");
c.setMaxAge(0);
response.addCookie(c);
7)cookie的路径问题
a.什么是cookie的路径问题?
浏览器访问服务器上的某个地址时,会比较该地址是否与cookie的路径匹配,只有匹配的cookie才会被发送。
b.cookie默认的路径
等于添加该cookie的web组件的路径。
比如,/day06/biz01/addCookie.jsp添加了一个cookie,则该cookie默认的路径就是"/day06/biz01"。
c.匹配规则
如果请求路径是cookie路径或者其子路径,则该cookie会被发送。
比如:
cookie路径是 "/day06/biz01",如果请求路径是
/day06/findCookie1.jsp no
/day06/biz01/findCookie2.jsp yes
/day06/biz01/abc/findCookie3.jsp yes
d.可以调用setPath方法来修改cookie的路径
比如
cookie.setPath(String path);