状态管理

1,状态管理
(1)什么是状态管理
将浏览器与web服务器之间多次交互当做一个
整体来看待,并且将多次交互所涉及的数据(即状态)
保存下来。
状态管理要解决两个问题:
a,身份的识别
b,状态的保存和维护
(2)如何进行状态管理
a,客户端的状态管理方案
即将状态保存在客户端(通常是浏览器),
比如cookie技术。
b,服务器端的状态管理方案
即将状态保存在web服务器端,比如
session(会话)技术
(3)cookie技术
1)cookie是什么?
服务器临时保存在浏览器端的少量的数据。
2)cookie是如何工作的?
当浏览器访问服务器时,服务器会将少量的
数据以set-cookie消息头的方式发送给浏览器,
浏览器会将这些数据临时保存下来;当浏览器
再次访问服务器时,会将之前保存的数据以
cookie消息头的方式发送给服务器。
3)如何添加cookie?
Cookie c = new Cookie(String name,String value);
response.addCookie©;
4)查看cookie?
Cookie[] request.getCookies();
注意:有可能返回null。
String cookie.getName();
String cookie.getValue();
5)cookie的编码问题
cookie只能保存合法的ascii字符,如果要保存
非ascii字符,比如中文,需要将中文转换成相应的
ascii字符的表示形式。
String URLEncoder.encode(
String str,String charset);
String URLDecoder.decode(
String str,String charset);
建议保存cookie时,最好都使用以上方法编码。
6)cookie的生存时间
如果添加cookie时,没有设置cookie的生存时间,
则浏览器会将cookie保存在内存里面,只要浏览器
不关闭,则cookie一直存在,如果浏览器关闭,则
cookie会被删除。
cookie.setMaxAge(int seconds);
注:
a,单位是秒
b,seconds的值可以是以下三种情况:
大于0: 浏览器一般会将cookie保存在硬盘上,
当超过指定的时间,浏览器会删除该cookie。
小于0:缺省值
等于0:删除cookie
比如,要删除一个名称为"uid"的cookie
Cookie c = new Cookie(“uid”,"");
c.setMaxAge(0);
response.addCookie©;

练习:
	写一个Find_addCookieServlet,该servlet
会先查看有没有一个名称为"uid"的cookie,如果
有,则显示该cookie的值;如果没有,则添加。
	不用考虑编码问题和生存时间问题。
	7)cookie的路径问题
		浏览器向服务器上的某个地址发请求时,会
	比较要访问的地址是否与cookie的地址(即路径)
	匹配,只有匹配的cookie才会发送。
		a,cookie的默认的路径
			等于添加该cookie的组件的路径。
		比如 "/web06/biz01/"的addCookie.jsp
	添加了一个cookie,则该cookie的路径就等于
	"/web06/biz01/"。
		b,匹配规则
		/web06/   findCookie1.jsp   error
		/web06/biz01/  findCookie2.jsp   ok
		/web06/biz01/abc/  findCookie3.jsp  ok
		要访问的路径必须是cookie的路径或者其子路径,
		cookie才会被发送。
		c,设置cookie的路径
			cookie.setPath(String path);
		比如,cookie.setPath("/web06");
	8)cookie的限制
		a,不安全,如果有敏感数据必须以cookie的方式
		来保存,必须加密。
		b,可以被用户禁止。
		c,cookie只能保存少量的数据(4k)。
		d,浏览器能够保存cookie的数量也有限制
		(大约300个左右)。
		e,只能保存字符串。

2,session(会话)
(1)session是什么?
服务器为客户端创建的一个用来维护状态的对象。
(2)session的工作原理
浏览器访问服务器时,服务器创建一个session
对象(该对象有一个唯一的id,一般称之为sessionId),
,服务器会将sessionId以cookie的方式发送给浏览器,
当浏览器再次访问服务器时,会将sessionId发送
给服务器,服务器可以依据sessionId找到之前创建的
session对象。
(3)如何获得session对象?
1)方式一
HttpSession s =
request.getSession(boolean flag);
当flag = true时
查看请求当中是否有sessionId,如果没有,
则创建一个session对象。如果有sessionId,
依据该sessionId查找对应的session对象,如果
找到了,则返回,如果找不到,则创建一个
新的session对象。
当flag = false时
查看请求当中是否有sessionId,如果没有,
返回null,如果有sessionId,依据该sessionId
查找对应的session对象,如果找到了,则返回,
如果找不到,返回null。
2)方式二
HttpSession s =
request.getSession();
等价于 request.getSession(true)。
(4)绑订数据相关的几个方法
//绑订数据到session对象上。
setAttribute(String name,Objec value);
//依据绑订名找到绑订值。该方法有可能返回null。
Object getAttribute(String name);
//解除绑订
removeAttribute(String name);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值