跨 HTTP 请求序列管理应用程序状态

CICS® 针对 Web 客户机发出的每个请求启动新的别名事务和新的程序。 此启动操作是针对由管道传送的请求、使用持续连接发出的请求、构成逻辑序列的请求以及个别的单机请求。 请考虑将如何在请求之间管理应用程序状态。

关于此任务

要跨请求序列、在不同程序或相同程序的不同实例之间共享数据,请使用 CICS 管理的资源或由 Web 客户机发出的请求的元素。

当需要在 Web 客户机与 CICS 之间进行多次请求和响应交换以成功完成任务时, Web 客户机将启动序列中的每个新步骤。 您可以设计由 CICS 发送的响应,以指导 Web 客户机以及 Web 客户机的任何人员用户执行下一步。 例如,实体主体可以包含控件(如链接或按钮),通过这些控件用户可以形成下一个请求。 然而,您不能简单地实现请求的正确序列。 特别是,计划的序列可能因为以下原因而被中断:
  • 客户机是一个 Web 浏览器,用户输入已知的 URL 来启动特定的请求,而不是选择先前响应提供的 HTML 页面中的控件。
  • 用户可通过关闭 Web 客户机或切换到 Web 客户机的备用活动来放弃该活动。
用户还可能延迟启动序列中的任何请求。

您必须设计自己的应用程序,使它们可以处理请求序列中的延迟或中断。 例如,如果您跨请求序列共享数据,请确保在请求序列未完成或过分延迟的情况下会清除该数据。 如果您的应用程序需要更新受保护的资源,请确保必须一起提交或回退的更新是在同一事务中完成。 因此您必须设计来自 Web 客户机的单个请求以完成更新。

对于应用程序而言,最佳状况是请求和响应的每次交换都是自包含的,且完成了任务的一个独立元素。 然而,此设计并不总是可行,特别是当任务复杂时或当 Web 客户机已发送由管道传送的请求序列时。 您可能需要伪会话模型,在这种模型中,必须在请求之间管理应用程序状态。 请使用以下方法:

过程

  • 您可以设计 Web 客户机发送的请求,使应用程序状态或共享数据合并在请求中;例如,作为 Web 客户机提交 HTML 表单时使用的请求 URL 的一部分。
    下一个程序可以检查请求 URL 以获取共享数据。
  • 您可以使用隐藏字段在作为响应返回给 Web 客户机的 HTML 表单中存储少量的应用程序状态。
    当用户执行计划序列中的下一个操作时,发送到 CICS 的请求可以包含隐藏字段,这些字段可以由下一个应用程序定位和读取。
  • 对于数目较大的状态以及具有扩展生存期的状态,您可创建 CICS 管理的资源来维持应用程序状态并传递表示该资源的令牌。
    CICS 提供用于将应用程序状态存储在主存储器或临时存储器队列中的样本状态管理程序 DFH$WBST 和 DFH$WBSR ,并提供应用程序可用于访问信息的令牌。
    令牌在伪会话中可作为 HTML 表单中的隐藏字段在程序间转换,或作为 URL 中的查询字符串在交互间转换。
    使用此方法可保留整个伪对话中的信息,还可保留用户与各种 CICS 应用程序之间的扩展交互中的信息 (可能是通过多个伪对话)。