JavaWeb之第5章会话及其会话技术_第1页
JavaWeb之第5章会话及其会话技术_第2页
JavaWeb之第5章会话及其会话技术_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

JavaWeb5章会话及其会话技术章会话技术:在Web开发中,服务器跟踪⽤户信息的技术当⽤户通过浏览器访问Web应⽤时,通常情况下,服务器需要对⽤户的状态进⾏跟踪。例如,⽤户在⽹站结算商品时,Web服务器必须根据请求⽤户的⾝份,找到该⽤户所购买的商品5.1会话概述在⽇常⽣活中,从拨通电话到挂断电话之间的⼀连串的你问我答的过程就是⼀个会话。Web应⽤中的会话过程类似于⽣活中的打电话过程,它指的是⼀个客户端(浏览器)与Web服务器之间连续发⽣的⼀系列请求和响应的过程,例如,⼀个⽤户在某⽹站上的整个购物过程就是⼀个会话在打电话过程中,通话双⽅会有通话内容,同样,在客户端与服务器端交互的过程中,也会产⽣⼀些数据。例如,⽤户甲和⼄分别登陆了购物⽹站,甲购买了⼀个Nokia⼿机,⼄购买了⼀个iPad,当这两个⽤户结账时,Web服务器需要对⽤户甲和⼄的信息分别进⾏保存。在前⾯讲解对象中,HttpServletRequest对象和ServletContext对象都可以对数据进⾏保存,但是这两个对象都不可⾏,具体原因如下:(1)客户端请求Web服务器时,针对每次HTTP请求,Web服务器都会创建⼀个HttpServletRequest对象,该对象只能保存本次请求所传递的数据。由于购买和结账是两个不同的请求,因此,在发送结账的请求时,之前购买请求中的数据将会丢失(2)使⽤ServletContext对象保存数据时,由于同⼀个Web应⽤共享的是⼀个ServletContext对象,因此,当⽤户在发送结账的请求时,由于⽆法区分哪些商品是哪个⽤户所购买的,⽽会将该购物⽹站中所有⽤户购买的商品进⾏结算,这显然也是不⾏的为了保存会话过程中产⽣的数据,在Servlet技术中,提供了两个⽤于保存会话数据的对象,分别是Cookie和Session5.2Cookie对象Cookie:是⼀种会话技术,它⽤于将会话过程的数据保存到⽤户的浏览器中,从⽽使浏览器和服务器可以更好地进⾏数据交互5.2.1什么是Cookie在现实⽣活中,当顾客在购物时,商城经常会赠送顾客⼀张会员卡,卡上记录⽤户的个⼈信息(姓名,⼿机号等),消费额度和积分额度等,顾客⼀旦接受了会员卡,以后每次光临该商城时,都可以使⽤这张会员卡,商城也将根据会员卡上的消费记录计算会员的优惠额度和累加积分。在Web应⽤中,Cookie的功能类似于这张会员卡,当⽤户通过浏览器访问Web服务器时,服务器会给客户端发送⼀些信息,这些信息都保存在Cookie中。这样,当该浏览器再次访问服务器时,都会在请求头中将Cookie发送给服务器,⽅便服务器对浏览器做出正确的响应服务器向客户端发送Cookie时,会在HTTP响应头字段中增加Set-Cookie响应头字段。Set-Cookie头字段中设置的Cookie遵循⼀定的语法格式,具体如下:Set-Cookieuser=itcastPath=/;在上述中,user表⽰Cookie的名称,itcast表⽰Cookie的值,Path表⽰Cookie的属性。Cookie必须以键值对的形式存在,其属性可以有多个,但是这些属性之间必须⽤分号和空格分隔5.2.2CookieAPI为了封装Cookie信息,在ServletAPI中提供了⼀个javax.servlet.http.Cookie类,该类包含了⽣成Cookie信息和提取Cookie信息的各种属性的⽅法1.构造⽅法:Cookie类有且仅有⼀个构造⽅法,具体语法格式如下:在Cookie的构造⽅法中,参数name⽤于指定Cookie的名称,value⽤于指定Cookie的值。Cookie⼀旦创建,它的名称就不能更改,Cookie的值可以为任何值,创建后允许被修改2.Cookie类的常⽤⽅法:通过Cookie的构造⽅法创建Cookie对象后,便可调⽤该类的所有⽅法Cookie类的常⽤⽅法,⼤多数的⽅法都⽐较简单,在这⾥只针对⽐较难理解的⽅法进⾏讲解,具体如下:1)setMaxAge(intexpiry)和getPath()⽅法:这两个⽅法⽤于设置和返回Cookie在浏览器上保存有效的秒数。如果设置值为⼀个正整数时,浏览器会将Cookie信息保存在本地硬盘中,从当前时间开始,在没有超过指定的秒数之前,这个Cookie都保持有效,并且同⼀台计算机上允许的该浏览器都可以使⽤这个Cookie信息。如果设置值为负整数时,浏览器会将Cookie信息保存在缓存中,当浏览器关闭时,Cookie信息会被删除。如果设置值为0时,则表⽰通知浏览器⽴即删除这个Cookie信息。默认情况下,Max-Age属性的值是-12)setPath(Stringuri)和getPath()⽅法:这两个⽅法是针对Cookie的Path属性的。如果创建的某个Cookie对象没有设置Path属性,那么该Cookie只对当前访问路径所属的⽬录及其⽬录有效。如果想让某个Cookie项对站点的所有⽬录下的访问路径都有效,应调⽤Cookie对象的setPath()⽅法将其Path属性设置为"/"5.3Session对象Session对象:是⼀种将会话数据保存到服务器端的技术Cookie技术可以将⽤户的信息保存在各⾃的浏览器中,并且可以在多次请求下实现数据的共享。但是如果传递的信息⽐较多,使⽤Cookie技术显然会增⼤服务器端程序处理的难道,这时可以使⽤Session技术5.3.1什么是Session当⼈们去医院就诊时,就诊病⼈需要办理医院的就诊卡,该卡上只有卡号,⽽没有其他信息。但病⼈每次去该医院就诊时,只要出⽰就诊卡,医务⼈员便可根据卡号查询到病⼈的就诊信息。Session技术就好⽐医院发放给病⼈的就医卡和医院为每个病⼈保留病例档案过程。当浏览器访问Web服务器时,Servlet容器就会创建⼀个Session对象和ID属性,其中,Session对象就相当于病历档案,ID相当于就诊卡号。当客户端后续访问服务器时,只要标识号传递给服务器,服务器就能判断出该请求是哪个客户端发送的,从⽽选择与之对应的Session对象为其服务注意:由于客户端需要接收,记录和回送Session对象的ID,因此,通常情况下,Session是借助Cookie技术来传递ID属性的5.3.2HttpSessionAPISession是与每个请求消息紧密相关的,为此,HttpServletRequest定义⽤于获取Session对象的getSession()⽅法,该⽅法有两种重载形式,具体如下:1publicHttpSessiongetSession(booleancreate)2publicHttpSessiongetSession()上⾯重载的两个⽅法都⽤于返回与当前请求相关的HttpSession对象。不同的是:第1个getSession()根据传递的参数来判断是否创建新的HttpSession对象,如果参数为ture,则在相关的HttpSession对象不存在时创建并返回新的HttpSession对象,否则不创建新的HttpSession对象,⽽是返回null。第2个getSession()⽅法则相当于第1个⽅法参数为true时的情况,在相关的HttpSession对象不存在时总是创建新的HttpSession对象。注意:由于getSession()⽅法可能会产⽣发送会话标识号的Cookie头字段,因此,必须在发送任何响应内容之前调⽤getSession()⽅法想要使⽤HttpSession对象管理会话数据,不仅需要获取到HttpSession对象,还需要了解HttpSession对象的相关⽅法5.3.3Session超时管理当客户端第1次访问某个能开启会话功能的资源时,Web服务器就会创建⼀个与该客户端对应的HttpSession对象。在HTTP协议中,Web服务器⽆法判断当前的客户端浏览器是否还会继续访问,也⽆法检测客户端浏览器是否关闭。所以,即使客户端已经离开或关闭浏览器,Web服务器还要保留与之对应的HttpSession对象。随着时间的推移,这些不再使⽤的HttpSession对象会在Web服务器中积累的越来越多,从⽽使Web服务器内存耗尽为了解决上述问题,Web服务器采⽤了“超时限制”的办法来判断客户端是否还在继续访问。在⼀定时间内,如果某个客户端⼀直没有请求访问,那么,Web服务器就会认为该客户端已经结束请求,并且将与该客户端会话所对应的HttpSession对象变成垃圾对象,等待垃圾收集器将其从内存彻底清除。反之,如果浏览器超时后,再次向服务器发出请求访问,那么Web服务器则会创建⼀个新的HttpSession对象,并为其分配⼀个新的ID属性在会话过程中,会话的有效时间可以在web.xml⽂件中设置,其默认值由Servlet容器定义。在<Tomcat安装⽬录>\conf\web.xml⽂件中,可以找到如下⼀段配置信息:<session-timeout>30</session-timeout></session-config>在上⾯配置信息中,设置的时间是以分钟为单位的,即Tomcat服务器的默认会话超时间隔为30分钟。如果将元素中的时间值设置成0或⼀个负数,则表⽰会话永不超时。由于<Tomcat安装⽬录>\conf\web.xml⽂件对站点内所有Web应⽤程序都起作⽤,因此,如果向单独设置某个Web应⽤程序的会话超时间隔,则需要在⾃⼰应⽤的web.xml⽂件中进⾏设置。注意:要想使Session失效,除了可以等待会话时间超时外,还可以通过invalidate()⽅法强制使会话失效URL重写机制:是将Session的会话标识号以参数的形式附加在超链接的URL地址后⾯。对于Tomcat服务器来说,就是将JSESSIONID关键字作为参数名以及会话

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论