文档详情

05-J2EE架构与程序设计(会话管理).ppt

发布:2017-05-19约3.93千字共23页下载文档
文本预览下载声明
J2EE架构与程序设计 主讲:李伟刚 liweigang@ 西北工业大学软件与微电子学院 第五章 会话管理 主要内容 Web容器session管理机理 Session寿命周期 用户自定义cookie Session监听器 Web容器session管理机理 需求 使客户端可以与Web应用来回多次对话 Web应用可以在多个请求上保持特定客户端的状态 可选方案 有状态会话Bean 使用数据库 使用HttpSession HttpSession HttpSession对象可以在同一个客户的多个请求上保存对话状态 它为特定的客户保持一个完整的会话 可以用于存储会话中客户的所有请求中的任何东西 Web容器session管理机理 如何工作 Web容器session管理机理 Web容器session管理机理 Web容器session管理机理 问题 容器如何区分客户? HTTP是无状态的,所以每个请求都是一个新连接 容器不能区分客户的第二次请求与第一个请求属于同一个客户 容器认为每个请求都来自于一个新的客户 客户需要一个唯一的会话ID 思路:在客户的首次请求中,容器生成一个唯一的会话ID并将它用响应传回客户,以后的每次请求,客户都将这个会话ID发回。容器通过这个会话ID匹配session,并将session与请求关联。 客户和容器间如何交换会话ID信息? Cookies! Web容器session管理机理 Web容器session管理机理 容器自动执行cookie操作 在响应中发送session cookie:在service方法中首次请求一个session时,cookie操作自动完成 无需手动创建HttpSession对象 无需手动生成唯一的seesion ID 无需手动创建新的Cookie对象 无需手动将seesion ID与Cookie对象关联 无需手动将Cookie设置到响应中(Set-Cookie头属性) 从请求中获得session ID 如果请求中包含一个session ID的cookie,则寻找与该ID匹配的session;否则,如果没有包含session ID的cookie,或者没有与该ID匹配的session,则创建一个新的session 询问session是否为新建的,使用 如果客户未使用过包含该session ID的响应,则该方法返回true Web容器session管理机理 若浏览器不支持cookie怎么办? URL重写(URL rewriting) 在响应中重编码URL 在sendRedirect()中使用URL重写 注意 URL重写在Response中处理 URL重写只能用于动态生成的页面,不能用于静态页面 Session寿命周期 问题 容器怎么知道客户已经走开,或者客户退出浏览器,或者客户计算机崩溃,或者……? 容器怎么知道何时才能安全地销毁一个session? HttpSession接口 Session寿命周期 销毁session 三种方法: 超时 在DD中设置超时 在特定session上设置超时 调用session对象上的invalidate()方法 web应用关闭(崩溃或反部署) 用户自定义cookie 尽管cookie最初是为了帮助支持会话状态,但可以使用用户自定义的cookie做别的事情 可以使用cookie在服务器和客户机之间交换字符串型的名/值对 Session cookie的寿命期与session一致,用户浏览器关闭后,就不存在了(JSESSIONID);但用户可以让cookie在浏览器关闭后保存在客户机上 用户自定义cookie Cookie API Cookie相关的操作都封装在Servlet API的三个类中 HttpServletRequest HttpServletResponse Cookie Session监听器 Session寿命周期中的事件 Session被创建 Session销毁 添加属性 移除属性 更新属性 准备钝化(passivated)session Session被激活 Session监听器 例子 HttpSessionListener Session监听器 HttpSessionAttributeListener Session监听器 Session迁移 应用场景 分布式web应用程序为了增加可靠性和性能常常采用集群方式部署 同一客户的请求,可能被发送到不同VM上的同一servlet的不同实例来处理 ServletContext、ServletConfig和HttpSession如何处理? 对一个VM,只有一个ServletContext 对一个VM,一个servlet,只有一个ServletConfig 每个Web应用,对一个给定的se
显示全部
相似文档