JavaWeb及其框架技术 课件 5章 会话及会话技术_第1页
JavaWeb及其框架技术 课件 5章 会话及会话技术_第2页
JavaWeb及其框架技术 课件 5章 会话及会话技术_第3页
JavaWeb及其框架技术 课件 5章 会话及会话技术_第4页
JavaWeb及其框架技术 课件 5章 会话及会话技术_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

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

文档简介

第5章会话及会话技术第5章Servlet的会话技术学习目标了解什么是Cookie,掌握Cookie对象了解什么是Session,掌握Session对象学会使用Session对象改进用户管理系统了解URL重写技术案例两个人打电话两个人你问我答的过程就是一个会话5.1 会话跟踪技术的概述思考

Web应用中的会话是什么样呢?一个用户在某网站上的整个购物过程就是一个会话Web应用中的会话过程类似于生活中的打电话过程,它指的是一个客户端(浏览器)与Web服务器之间连续发生的一系列请求和响应过程。在Servlet技术中,提供了两个用于保存会话数据的对象,分别是Cookie和Session。5.1 会话跟踪技术的概述当用户通过浏览器访问服务器,需要服务器跟踪用户的状态时,这种跟踪用户信息的技术就称为会话跟踪技术。为什么需要对会话进行跟踪呢?这是由于Web应用采用无状态的HTTP协议进行通信,HTTP的无状态意味着:用户使用HTTP协议不能够记忆用户自己和相应的请求

,服务器把每一次请求都看作新的请求,总是根据当时提交的信息来给出响应,如此一来,服务器就无法跟踪用户的会话,它会将会话中涉及的多次请求都看作新的请求,而不能将这些请求与用户关联起来,也就无法支持用户会话过程的实现。因此,要想实现用户的会话,就需要采用某种会话跟踪技术,记住用户和其请求,将单个无状态的HTTP请求转换为整体有状态的Web应用。会话跟踪技术的原理比较简单,当服务器收到客户端第一次发来的请求时,服务器会生成一个唯一的标识符,即会话ID,客户端随后发送的每一次请求中都必须包含这个会话ID。服务器可以通过该会话ID来识别用户的请求属于哪一个会话,这样就把用户和该用户的一系列请求关联起来,从而实现用户会话跟踪。在实际应用中,我们既可以选择手动生成并管理会话ID(采用Cookie技术、URL重写技术或隐藏表单字段技术来实现),也可以采用Servlet提供的会话跟踪API,自动生成并管理会话ID。手动实现会话跟踪技术,面临大量重复性工作,而且容易出错。为此,Servlet提供的自动会话跟踪方法,HttpSession接口,就非常地方便,利用此接口可以让程序员在更高层次解决问题,从而摆脱底层的复杂操作。Servlet容器负责HttpSession接口的实现,在需要进行会话跟踪的时候,通过调用此接口中相应的方法,Servlet容器会创建会话对象,通过会话对象HttpSession的相应方法可以存取用户的会话ID的相关信息,从而实现会话跟踪。HttpSession底层是基于Cookie技术或URL重写技术实现的,若客户端支持Cookie技术,则优先使用Cookie进行会话跟踪,并不需要直接操纵Cookie对象,若用户端禁用Cookie技术,则自动使用URL重写技术来进行跟踪。什么是Cookie?通过会员卡可以看到用户的信息用户的消费积分会累计到会员卡会员卡用户Cookie的功能类似于这张会员卡。5.2.1 Cookie5.2 浏览器会话Cookie技术看一下Cookie在浏览器和服务器之间的传输服务器第一次访问Server1,不存在Cookie浏览器Cookie存放区第一次访问Server1第1次响应,setCookie:name=value将Server1的Cookie保存起来后续访问Server1:Cookie:name=value后续访问Server1,直接获取Cookie第一次访问服务器,服务器会增加Set-Cookie头字段,将Cookie信息发送给浏览器,并保存在客户端。当后续访问服务器时,会在请求消息中将用户信息以Cookie的形式发送给服务器,从而使服务器端分辨出当前请求是由哪个用户发出的。【结论】5.2.1Cookie在ServletAPI中提供了javax.servlet.http.Cookie类,它包含了生成Cookie信息和提取Cookie信息各个属性的方法。1、构造方法publicCookie(java.lang.Stringname,java.lang.Stringvalue)Cookie的名称Cookie的值注意:Cookie一旦被创建,它的名称就不能更改。5.2.2CookieAPI方法声明功能描述StringgetName()用于返回Cookie的名称voidsetValue(String

newValue)用于为Cookie设置一个新的值StringgetValue()用于返回Cookie的值voidsetMaxAge(int

expiry)用于设置Cookie在浏览器客户机上保持有效的秒数intgetMaxAge()用于返回Cookie在浏览器客户机上保持有效的秒数voidsetPath(String

uri)用于设置该Cookie项的有效目录路径StringgetPath()用于返回该Cookie项的有效目录路径voidsetDomain(String

pattern)用于设置该Cookie项的有效域StringgetDomain()用于返回该Cookie项的有效域voidsetVersion(int

v)用于设置该Cookie项采用的协议版本intgetVersion()用于返回该Cookie项采用的协议版本voidsetComment(String

purpose)用于设置该Cookie项的注解部分StringgetComment()用于返回该Cookie项的注解部分voidsetSecure(boolean

flag)用于设置该Cookie项是否只能使用安全的协议传送booleangetSecure()用于返回该Cookie项是否只能使用安全的协议传送这两个方法用于设置和返回Cookie在浏览器上保持有效的秒数。如果设置的值为一个正整数时,浏览器会将Cookie信息保存在本地硬盘中。如果设置值为负整数时,浏览器会将Cookie信息保存在的缓存中,当浏览器关闭时,Cookie信息会被删除。如果设置值为0时,则表示通知浏览器立即删除这个Cookie信息。默认情况下,Max-Age属性的值是-1。2、Cookie类的常用方法这两个方法是针对Cookie的Path属性。如果创建的某个Cookie对象没有设置Path属性,那么该Cookie只对当前访问路径所属的目录及其子目录有效。如果想让某个Cookie项对站点的所有目录下的访问路径都有效,应调用Cookie对象的setPath()方法将其Path属性设置为“/”。这两个方法都是用来设置或获取Cookie的Domain属性。具体来说,setDomain方法用于设置Cookie的Domain属性,而getDomain方法用于获取Cookie的Domain属性。默认情况下,Domain属性的值为当前主机名,浏览器在访问当前主机下的资源时,都会将Cookie信息回送给服务器。5.2.2CookieAPI2任务目标:具体实现步骤(详见教材【5-1】)实现步骤:

1创建Servlet配置映射信息,查看运行效果学会如何使用Cookie技术实现显示用户上次的访问时间的功能5.2.3 Cookie实例

显示用户上次访问时间5.2.4 Cookie的原理分析当浏览器访问Web服务器时,Servlet容器就会创建一个Session对象和ID属性,其中,Session对象就相当于会员信息,ID就相当于会员卡号。当客户端后续访问服务器时,只要将标识号传递给服务器,服务器就能判断出该请求是哪个客户端发送的,从而选择与之对应的Session对象为其服务。通常情况下,Session是借助Cookie技术来传递ID属性的。5.3.1 Session技术5.3 服务器会话Session技术5.3.2 Session的工作原理获取Session如何获取Session对象?HttpServletRequest定义了用于获取Session对象的getSession()方法publicHttpSessiongetSession(booleancreate)publicHttpSessiongetSession()5.3.2HttpSessionAPI方法声明功能描述StringgetId()用于返回与当前HttpSession对象关联的会话标识号longgetCreationTime()返回Session创建的时间,这个时间是创建Session的时间与1970年1月1日00:00:00之间时间差的毫秒表示形式longgetLastAccessedTime()返回客户端最后一次发送与Session相关请求的时间,这个时间是发送请求的时间与1970年1月1日00:00:00之间时间差的毫秒表示形式voidsetMaxInactiveInterval(intinterval)用于设置当前HttpSession对象可空闲的以秒为单位的最长时间,也就是修改当前会话的默认超时间隔booleanisNew()判断当前HttpSession对象是否是新创建的voidinvalidate()用于强制使Session对象无效ServletContextgetServletContext()用于返回当前HttpSession对象所属于的WEB应用程序对象,即代表当前WEB应用程序的ServletContext对象voidsetAttribite(Stringname,Objectvalue)用于将一个对象与一个名称关联后存储到当前的HttpSession对象中StringgetAttribute()用于从当前HttpSession对象中返回指定名称的属性对象voidremoveAttribute(Stringname)用于从当前HttpSession对象中删除指定名称的属性5.3.3HttpSessionAPI什么是Session?在程序中,Web服务器无法判断当前客户端是否已经离开或关闭,还会保留与之对应的Session对象。But,Session对象还会占用内存,导致Web服务器崩溃怎么办?Web服务器采用了超时管理来判断客户端是否存在!在一定时间内,如果某个客户端一直没有请求访问,那么,Web服务器会认为客户端已经结束请求,将对应的Session对象变成垃圾对象,并进行清除。反之,Web服务器会创建一个新的Session对象,并分配一个新的ID属性。5.3.4 废弃当前会话被动方式——设置会话“超时限制”

机制<session-config> <session-timeout>30</session-timeout></session-config>在会话过程中,会话的有效时间可以在web.xml文件中设置,其默认值由Servlet容器定义。在<tomcat安装目录>\conf\web.xml文件中,可以找到如下一段配置信息:超时的时间值,单位为分钟,Tomcat的默认超时间隔为30分钟注意:如果将<session-timeout>元素中的时间值设置成0或负数,则表示会话永不超时!5.3.4 废弃当前会话主动方式——调用invalidate()方法大多数情况下,服务器无法判断会话是否结束,所以我们主要采用被动方式来结束会话。但在有些情况下,我们明确知道会话可以结束了,比如用户点击了“关闭连接”按钮,这时用户也是可以主动结束会话的,这就需要调用invalidate()方法来执行。5.4URL重写技术前面我们看到,浏览器会话Cookie技术需要客户端的浏览器开启Cookie,这样才能在浏览器端保存用户信息,实现跟踪,就算是Session技术也同样需要Cookie来保存SessionID才能实现跟踪。如果浏览器关闭Cookie,那么服务器端就无法通过Cookie保存用户会话信息,也就无法实现用户跟踪了。考虑到这种情况可能出现,Servlet规范引入了URL重写机制来保存用户的会话信息。所谓URL重写,就是指将Session的会话标识号(会话ID)以参数的形式附加在超链接的URL地址后面,服务器可以使用传递过来的会话ID来识别和跟踪用户。方法描述StringencodeRedirectURL(Stringurl)对sendRedirect方法中使用的指定的URL进行编码,若编码不是必需的,则返回未改变的URLStringencodeURL(Stringurl)对包含session会话ID的指定URL进行编码,若编码不是必需的,则返回的未改变的URL至于如何

温馨提示

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

评论

0/150

提交评论