1、状态管理
(1)什么是状态管理
将客户端(浏览器)与服务器之间多次交互当做一个整体来看待,并且将交互所涉及的数据保存下来。
(2)如何进行状态管理
第一类方案:将状态保存在客户端(浏览器),
比如cookie技术。
第二类方案:将状态保存在服务器端,
比如session技术。
Cookie*
(1)什么是cookie?
浏览器访问服务器时,服务器会将少量的数据以set-cookie消息头的方式发送给浏览器,浏览器会将这些数据临时保存下来;当浏览器再次访问服务器时,会将之前保存的数据以cookie消息头的方式发送给服务器。
(2)如何创建cookie?
Cookie cookie =
new Cookie(String name,String value);
response.addCookie(cookie);
(3)如何查询cookie
//如果没有cookie,返回null
Cookie[] request.getCookies();
String cookie.getName();
String cookie.getValue();
(4)编码问题
cookie的值如果是中文,需要将其转换成
ascii字符。
String URLEncoder.encode(String str,String code);
String URLDecoder.decode(String str,String code);
(5)生存时间
cookie.setMaxAge(int seconds);
注意:
seconds:秒
seconds > 0: 浏览器会将cookie保存在硬盘上,如果超过指定的时间,浏览器会删除该cookie。seconds < 0: 默认值,浏览器会将cookie保存在内存里面,如果浏览器关闭,cookie会被删除。seconds = 0: 删除cookie
比如,要删除一个名称为username的cookie
Cookie c = new Cookie("username","");
c.setMaxAge(0);
response.addCookie(c);
(6)cookie的路径问题
a,什么是cookie路径问题?
浏览器在向服务器的某个地址发请求时,会比较cookie的路径是否与要访问的地址匹配,只有匹配的cookie,才会发送给服务器。
b,匹配规则
只有当要访问的地址是cookie的路径或者是其子路径时,浏览器才会将对应的cookie发送给服务器。
c,cookie的默认的路径
cookie的默认的路径等于创建该cookie的组件的路径。
d, 可以调用 cookie.setPath(String path)来修改
默认的路径。
一般调用 cookie.setPath("/appname");
cookie的路径: /web07/app1
(7)cookie的限制
a, cookie可以被浏览器禁止。
b, cookie能够保存的数据大小有限制(4k左右),
并且浏览器最多能够保存的cookie的数量也有限制(大约是300)。
c, cookie不安全。
d,cookie只能够保存字符串。
Session*
session
(1)session是什么?
浏览器访问服务器时,服务器会创建一个特殊的对象(session对象,该对象有一个唯一的id号,称之为sessionId),接下来服务器在默认情况下,会使用cookie机制将sessionId发送给浏览器,浏览器会将sessionId保存下来(内存);当浏览器再次访问服务器时,浏览器会将sessionId发送给服务器,服务器依据sessionId就可以找到之前所创建的session对象。
(2) 如何获得一个session对象?
a,方式一:
HttpSession session = request.getSession();
等价于request.getSession(true)。
b,方式二:
HttpSession session =
request.getSession(boolean flag);
当flag为true:
服务器会查看请求当中是否有sessionId,如果没有,则创建一个session对象;如果有sessionId,服务器会依据sessionId查找对应的session对象,如果找到,则返回,
如果找不到,则创建一个新的session对象。
当flag为false:
服务器会查看请求当中是否有sessionId,如果没有,返回null; 如果有sessionId,服务器会依据sessionId查找对应的session对象,如果找到,则返回,如果找不到,返回null。
(3)HttpSession接口提供的一些常用方法
a, String getId();
b, session.setAttribute(String name,Object value);
//如果name对应的值不存在,返回null。
Object getAttribute(String name);
//解除绑订
removeAttribute(String name);
(4)session的超时
a,什么是session的超时?
服务器会将一些空闲时间过长的session对象
删除掉。服务器缺省的超时限制是30分钟。
b,修改超时的时间
方式一:改服务器的配置文件,比如,
可以修改tomat的web.xml文件(confweb.xml)
<session-config>
<session-timeout>30</session-timeout>
</session-config>
以上配置也可以放到某个应用的web.xml文件当中。
方式二:
setMaxInactiveInterval(int seconds);
(5) 立即删除session
session.invalidate();