科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道J2EE探索 有状态网络的J2EE技术 (1)

J2EE探索 有状态网络的J2EE技术 (1)

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

J2EE探索 有状态网络的J2EE技术 (1)

作者:sixth 来源:赛迪论坛 2007年11月18日

关键字: 有状态 J2EE

  • 评论
  • 分享微博
  • 分享邮件

有状态应用程序管理
您可能会回想起来,在上一篇文章中,Web 应用程序协议被分成两大类别:无状态(stateless)和有状态(stateful),协议的状态指的是它“记忆”从一个传输到下一个传输的信息的能力。因为有状态连通性是大多数企业应用程序的基本需求之一,并且因为 Web 应用程序依赖于 HTTP(内在的无状态协议),所以聪明的开发人员已经找到了许多技巧来在 HTTP 上模拟有状态连接。有状态信息可以存储在 HTML 表单字段中、附加到超链接或者存储在客户机端的 cookie 中。

客户机和服务器之间的有状态交互可以在 Web 层或业务层上进行管理。要在 Web 层上管理状态,我们使用与 HTTPSession API 结合的 servlet。要在业务层上管理状态,我们使用有状态会话 EJB 组件。在接下来的章节里,我们将探究这两种开发选项。

Web 层
Servlet 体系结构的 HTTPSession API 允许应用程序开发人员管理跨网络的客户机/服务器交互(或会话)的状态。HTTPSession 接口定义了 HTTPSession API 的核心功能。它为 J2EE 应用程序提供了一种方法,使它可以识别跨多个页面请求的单个客户机,以及将数据存储在与那个客户机相关联的服务器上。通过该接口,servlet 容器创建和管理客户机和服务器之间的会话。该会话由 HTTPSession 对象表示,它可以跨来自相同客户机的多个连接和页面请求持续存在一段特定的时间。Servlet 使用该接口来查看与处理有关会话的信息,如创建时间和上一次访问会话的时间。该接口还允许 servlet 将对象绑定到会话,从而以一种跨多个连接(来自相同客户机)持续存在的方式将该信息与特定的客户机进行关联。

Servlet 体系结构
Servlet 体系结构并没有因为使用 HTTPSession API 而发生改变。就象在无状态网络中一样,servlet 代表客户机执行业务请求,并且充当控制器、视图,或者二者同时兼任。Servlet 还可以有效地处理用户交互,如内容格式化和显示、基本请求处理和安全性请求及更多。就象在无状态网络中一样,servlet 最好用于管理客户机交互,那么通常可使用助手类(如 JavaBeans)来应付繁重的处理或者与后端组件相互操作(interface)。
因此,HTTPSession 接口允许 servlet 容器创建和管理客户机会话,并且使 servlet 能访问与会话相关的信息、将对象绑定到会话以及访问先前绑定的对象。到现在为止,一直都还不错。但是 servlet 容器如何跟踪通过无状态协议(如 HTTP)通信的客户机呢?为了实现这一点,为每个 HTTPSession 对象都提供一个唯一的标识,以确保每个客户机会话和与会话相关的数据可以被唯一标识。考虑到 HTTP 内在的无状态本质,在每次请求时,该会话标识必须被客户机传递给服务器,以便于 servlet 容器将客户机与正确的会话相关联。会话标识可以用三种方式中一种进行传递:作为 HTML 表单中的参数(通常是隐藏字段);作为附加在查询字符串后的参数;或者作为 cookie 的属性。不管会话标识如何传递,servlet 容器都将拦截它,检查它,并找到与之关联的 HTTPSession 对象。

Servlet 性能
由 Servlet 体系结构创建的轻量级线程模型决不会因为 servlet 或 JSP 文件创建、读取或修改 HTTPSession 对象而受到破坏。该对象只是将对象引用存储为简单键-值对的散列表或类似的集合。同样,HTTPSession 内存空间的实现本身也是轻量级的,只需要存储(或许序列化)会话对象和相应的会话标识。简而言之,servlet 可以支持与 HTTP 客户机的有状态交互,而且对应用程序设计或容器资源产生最小的影响。

查看本文来源
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章