11,10,25
今天课堂的主要内容:
新课内容:
Session的相关知识点
1、 除了Cookie,也可以采用Session保存会话信息,进行跟踪的机制:
(1)什么是Session:
Cookie保存的数据量是有限的。是将数据保存在了客户端。而Session是一种将会话状态保存在服务器端的技术。它好比: 病例卡:编号,姓名 --------留给自己保存
病历档案:编号,姓名。------在医院保存
当浏览器-----发送请求-----àweb服务器端(开辟一个存储区域,用来保存会话状态)某个servlet程序 ,会话开始 一个唯一的标识,会话ID。
浏览器(id) ß-------------------id
浏览器------------(id)----------------àservlet
会话ID==病历卡。 保存会话状态存储区域==病历档案。
保存会话状态的存储区域---------
(2)Session的跟踪机制:
a)Servlet API规范中定义了一个HttpSession接口,HttpSession接口定义了各种管理和操作会话状态的方法。
b)HttpSession对象是保持会话状态信息的存储结构,一个客户端在WEB服务器端对应一个各自的HttpSession对象。
c)WEB服务器并不会在客户端开始访问它时就创建HttpSession对象,只有客户端访问某个能与客户端开启会话的Servlet程序时,WEB应用程序才会创建一个与该客户端对应的HttpSession对象。
d)WEB服务器为HttpSession对象分配一个独一无二的会话标识号,然后在响应消息中将这个会话标识号传递给客户端。客户端需要记住会话标识号,并在后续的每次访问请求中都把这个会话标识号传送给WEB服务器,WEB服务器端程序依据回传的会话标识号就知道这次请求是哪个客户端发出的,从而选择与之对应的HttpSession对象。
e)WEB应用程序创建了与某个客户端对应的HttpSession对象后,只要没有超出一个限定的空闲时间段,HttpSession对象就驻留在WEB服务器内存之中,该客户端此后访问任意的Servlet程序时,它们都使用与客户端对应的那个已存在的HttpSession对象。
f)HttpSession接口中专门定义了一个setAttribute方法来将对象存储到HttpSession对象中,还定义了一个getAttribute方法来检索存储在HttpSession对象中的对象,存储进HttpSession对象中的对象可以被属于同一个会话的各个请求的处理程序共享。
g)Session是实现网上商城的购物车的最佳方案,存储在某个客户Session中的一个集合对象就可充当该客户的一个购物车。
(3)请求域作用范围是最小的。
(4)Session的超时管理:
a)WEB服务器无法判断当前的客户端浏览器是否还会继续访问,也无法检测客户端浏览器是否关闭,所以,即使客户已经离开或关闭了浏览器,WEB服务器还要保留与之对应的HttpSession对象。
b)随着时间的推移而不断增加新的访问客户端,WEB服务器内存中将会因此积累起大量的不再被使用的HttpSession对象,并将最终导致服务器内存耗尽。
c)WEB服务器采用“超时限制”的办法来判断客户端是否还在继续访问,如果某个客户端在一定的时间之内没有发出后续请求,WEB服务器则认为客户端已经停止了活动,结束与该客户端的会话并将与之对应的HttpSession对象变成垃圾。
d)如果客户端浏览器超时后再次发出访问请求,WEB服务器则认为这是一个新的会话的开始,将为之创建新的HttpSession对象和分配新的会话标识号。
e)会话的超时间隔可以在web.xml文件中设置,其默认值由Servlet容器定义。
<session-config>
<session-timeout>30</session-timeout>
</session-config>
(5)HttpSession接口中的方法
isNew方法:可以判断一下session对象是不是新建的对象。
(6)HttpServletRequest接口中的Session方法:
a)getSession方法
public HttpSession getSession(boolean create)
public HttpSession getSession()
b)isRequestedSessionIdValid方法
c)isRequestedSessionIdFromCookie方法
d)isRequestedSessionIdFromURL方法
httpSession session=request.getSession(true);
httpSession session=request.getSession();
功能:如果session对象不存在,创建session对象。
如果session已经存在,获取session对象的引用。
httpSession session=request.getSession(false);
功能:如果session存在,返回session对象的引用。
如果session对象不存在,返回null。
例如:
LoginServlet:
HttpSession session=request.getSession();
Session.setAttribute(“name”,name);
转到web其他页面去查看商品了。
购物车的流程:
首页:看到所有商品 InitServlet
1 洗衣机 800 <a href=’/demo/buyServlet?id=1’>加入购物车</a>
2 电视 800 <a href=’/demo/buyServlet?id=2’>加入购物车</a>
3 MP4 800 <a href=’/demo/buyServlet?id=3’>加入购物车</a>
4 录音机 800 <a href=’/demo/buyServlet?id=4’>加入购物车</a>
BuyServlet:
先获取到要购买的商品的id,获取对应的商品对象
List cart=new LinkedList();
cart.add(good);
session.setAttribute(cart);
List cart 购物车
Cart.add(good);
HttpSession session=request.getSession(false);
If(session==null){
跳转到登录的页面
}
Session.add(cart);