Servlet会话跟踪 (2).ppt
第四课,Servlet会话跟踪,回 顾,HttpServletRequest常用方法HttpServletResponse常用方法Servlet请求转发与重定向区别转发是从当前服务器调转 返回浏览器浏览器再发送请求转发请求一次,重定向请求两次 转发地址栏不改变,重定向会改变Servlet上下文(ServletContext)概念和接口方法,提问,本章案例,用会话跟踪(Cookie、URL重写、隐藏表单域)显示欢迎词使用Servlet会话跟踪实现购物车功能,本章目标,HTTP协议的无状态性HttpSession的使用Cookie的介绍与使用,HTTP的无状态性,会话(Session),1、会话概念顾名思义,会话是指客户端与服务端的一场对话过程,客户端问一句话,服务端应答一句话,这样一问一答的过程可以连续持续多次,这个过程就被称之为一个会话过程;其中客户端问的动作就是发送请求(Request)的动作,而服务端应答(Response)的动作并是响应客户端的动作,多次Request与Response的就构成了一个会话(Session)2、会话跟踪:会话跟踪机制是一种在客户端与服务器之间保持HTTP状态的解决方案,这些解决方案主要分为如下几种:A、Cookie:在浏览器支持Cookie的情况下使用Cookie来跟踪B、URL重写:在浏览器不支持Cookie的情况下使用URL重写C、Session:建立在Cookie与URL重写基础之上的高层接口,默认使用Cookie,在浏览器禁用Cookie的情况下自动切换成URL重写3、如果客户端浏览器被关闭则会话将被强行结束,Servlet中会话跟踪(Session),Session机制是一种服务器端的机制,服务器使用一种类似于散列表的结构来保存会话过程中的信息,它有如下主要的API:A、request.getSession():获取与当前请求相关联的Session对象,如果当前请求已经存在一个与之相关联的Session则直接返回它,如果没有则创建一个与当前请求相关联的Session对象B、setAttribute(String attr,Object object):将一个键值对推入Session作用域中保存起来,以便在同一个会话的其它请求中获取C、getAttribute(String attr):根据键名从Session作用域中取出对应的值D、removeAttribute(String attr):删除Session作用域中参数键名标识的键值对E、getId():返回通过重写URL得到的SessionId,它是Session的唯一标识符F、isNew():判断当前的Session是否为新创建的会话G、getCreationTime()返回Session的创建时间(使用毫秒表示)H、getLastAccessedTime():返回当前Session最后一次的访问时间(使用毫秒表示),如果是第一次访问则返回值与getCreationTime()返回值相同I、invalidate():删除当前会话(结束当前的会话,释放会话作用域中保存的所有信息),会话超时,Session的默认失效时间是30分钟(1800秒),我们也可以使用下面两种方式之一显式的为Session设置一个失效时间:A、HttpSession类的setMaxInactiveInterval()方法为每个单独的Session对象实例设置失效时间(局部设置,单位是秒,如果设置为负数表示永不失效)B、在web.xml中的web-app标签下使用session-config和session-timeout元素配置所有Session的失效时间(全局设置,单位是分钟,如果设置为0或负数表示永不失效),与Servlet有关的四大作用域,application作用域:该作用域中数据的存储由ServletContext实例来完成,application作用域中包含来自多个不同客户端的session会话作用域数据;其作用域中数据生命周期的结束点与整个web应用工程同步session作用域:该作用域中数据的存储由HttpSession实例来成,session作用域中包含来自多次请求-响应的request作用域数据,其作用域中数据生命周期的结束点取决于设置的最大空闲会话时间和用户浏览器的关闭request作用域:该作用域中数据的存储由ServletRequest实例来完成,request作用域中包含来自多次服务端跳转的页面作用域数据,request作用域生命周期的结束点是一次请求-响应的完成page作用域:该作用域中数据的存储由PageContext实例来完成,page作用域中包含对应JSP页面中存放的各种数据,page作用域的生命周期是该页面的执行结束(如:当从一个页面跳转到另一个页面则该页面的page作用域将被销毁),PageContext在我们学校JSP时再讲解它注:上面的四大作用域是由大到小的,每个作用域都有如下方法:setAttribute(attr,value):向作用域中存放键值对,如果键名存在则替换值getAttribute(attr):从作用域中取出键名对应的值removeAttribute(attr):从作用域中移除键名对应的键值对,总 结,1、会话就是多次请求与响应的组合,一个会话的结束可能是因为会话超时或者用户关闭浏览器所致,Session默认使用Cookie跟踪,在客户端浏览器禁用Cookie的情况下会自动切换成URL重写方式来跟踪会话2、Session作用域中的数据存取方式与Request基本相同,仅仅是作用域范围和生命周期不同3、Session默认的超时时间是30分钟,可以通过Session实例设置它的超时时间,也可以通过web.xml来配置一个web工程应用中的所有Session的超时时间4、与Servlet有关的四大作用域的数据存储方式完全相同,不同之处在于作用域中存储数据的范围和生命周期不同,作 业,创建test数据库与student表,student表中有学生的登录帐户和密码两个字段学生在登录html界面上输入用户名和密码点击登录,服务端接收到请求之后在数据库中查找登录帐户和密码,如果没有找到则跳转到登录失败的html页面,如果登录成功则在Session中保存当前登录学生的信息,并跳转到main.html页面中去在main.html页面中点击一个超链接,服务端判断当前请求的用户是否已经登录,如果没有登录则跳转到登录页面,如果已经登录则显示出当前学生的所有信息,Thank You!,