Servlet第六天

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);

猜你喜欢

转载自blog.csdn.net/anqing_liu/article/details/80636137