1. 状态管理
(1)什么是状态管理?
将浏览器与web服务器之间多次交互当做一个整体来处理,
并且将多次交互所产生的数据(即状态)保存下来。
(2)如何进行状态管理?
a.方式一 将状态保存在浏览器端
通常使用Cookie技术。
b.方式二 将状态保存在服务器端
通常使用Session技术。
(3)Cookie
1)什么是Cookie?
服务器临时存放在浏览器端的少量数据,
用于跟踪用户的状态。
当浏览器访问服务器时,服务器会将少量数据以
set-cookie消息头的方式发送给浏览器,浏览器
会将这些数据保存下来。
当浏览器再次访问服务器时,会将这些数据以cookie
消息头的方式发送给服务器。
2)如何添加Cookie?
Cookie c = new Cookie(String name,String value);
注:
name一般称之为cookie名,value称之为cookie值,都必须是字符串。
response.addCookie(c);
3)如何读取Cookie?
Cookie[] request.getCookies();
注:
该方法有可能返回null。
String cookie.getName();
String cookie.getValue();
4)cookie的生存时间
a.默认情况下,浏览器会将cookie保存在内存里面,浏览器
只要关闭,cookie会被删除。
b.可以调用setMaxAge方法来设置cookie的生存时间
cookie.setMaxAge(int seconds);
注:
a.单位是秒。
b.当seconds > 0,浏览器会将cookie保存在硬盘上,当超过指定的时间,浏览器会将cookie删除。
c.当seconds < 0,缺省值(浏览器会将cookie保存在内存里面)。
d.当seconds = 0,删除cookie。
比如,要删除一个名称为"username"的cookie,代码如下:
Cookie c = new Cookie("username","");
c.setMaxAge(0);
response.addCookie(c);
5)cookie的编码问题
a.什么是cookie的编码问题?
cookie只能存放合法的ascii字符,如果要存放中文,
需要将中文转换成合法的ascii字符的形式。
b.如何处理?
String URLEncoder.encode(String str,String charset);
String URLDecoder.decode(String str,String
charset);
建议,在实际开发时,对添加的数据统一使用encode
方法来编码。
6)cookie的路径问题
a.什么是cookie的路径问题?
浏览器访问服务器时,会比较请求地址是否与cookie
的路径匹配,只有匹配的cookie才会被发送。
b.cookie的默认路径
cookie的默认路径等于添加该cookie的web组件的路径,比如AddCookieServlet(/day06/addCookie) 添加了一个cookie,则该cookie的默认路径是
"/day06"。
c.匹配规则
请求地址要么是等于cookie的路径,要么是cookie的
子路径,只有符合该条件的cookie,浏览器才会发送出去。
d.修改路径
cookie.setPath(String path);
注:
path就是路径。
7)cookie的限制
a. cookie可以被用户禁止。
b. cookie不安全。
对于敏感数据,一定要加密。
c. cookie只能保存少量的数据。
大约4k左右
d. cookie的数量也有限制。
大约是几百个
e. cookie只能保存字符串。
练习
写一个Servlet,该Servlet先查看有没有一个名称为
“cart”的cookie,如果有,则显示该Cookie的值;如果
没有,则添加之。