?
Servlet有状态管理――Web 层
?
Servlet 体系结构的?HTTPSession
?API 允许应用程序开发人员管理跨网络的客户机/服务器交互(或?会话)的状态。?HTTPSession
?接口定义了?HTTPSession
?API 的核心功能。它为 J2EE 应用程序提供了一种方法,使它可以识别跨多个页面请求的单个客户机,以及将数据存储在与那个客户机相关联的服务器上。通过该接口,servlet 容器创建和管理客户机和服务器之间的会话。该会话由?HTTPSession
对象表示,它可以跨来自相同客户机的多个连接和页面请求持续存在一段特定的时间。Servlet 使用该接口来查看与处理有关会话的信息,如创建时间和上一次访问会话的时间。该接口还允许 servlet 将对象绑定到会话,从而以一种跨多个连接(来自相同客户机)持续存在的方式将该信息与特定的客户机进行关联。
因此,?HTTPSession
?接口允许 servlet 容器创建和管理客户机会话,并且使 servlet 能访问与会话相关的信息、将对象绑定到会话以及访问先前绑定的对象。到现在为止,一直都还不错。但是 servlet 容器如何跟踪通过无状态协议(如 HTTP)通信的客户机呢?为了实现这一点,为每个?HTTPSession
?对象都提供一个唯一的标识,以确保每个客户机会话和与会话相关的数据可以被唯一标识。考虑到 HTTP 内在的无状态本质,在每次请求时,该会话标识必须被客户机传递给服务器,以便于 servlet 容器将客户机与正确的会话相关联。会话标识可以用三种方式中一种进行传递:作为 HTML 表单中的参数(通常是隐藏字段);作为附加在查询字符串后的参数;或者作为 cookie 的属性。不管会话标识如何传递,servlet 容器都将拦截它,检查它,并找到与之关联的HTTPSession
?对象。
Servlet 性能
由 Servlet 体系结构创建的轻量级线程模型决不会因为 servlet 或 JSP 文件创建、读取或修改?HTTPSession
?对象而受到破坏。该对象只是将对象引用存储为简单键-值对的散列表或类似的集合。同样,?HTTPSession
?内存空间的实现本身也是轻量级的,只需要存储(或许序列化)会话对象和相应的会话标识。简而言之,servlet 可以支持与 HTTP 客户机的有状态交互,而且对应用程序设计或容器资源产生最小的影响。
参考?http://www.ibm.com/developerworks/cn/java/j-pj2ee2/