首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

用 continuation 开发复杂的 Web 应用程序(4)

用 continuation 开发复杂的 Web 应用程序(4)

规则由您定!虽然有可能把 continuation 作为一个更简单的 MVC 框架替代品来实现,但是这种编程风格确实提供了一些独一无二的优势,特别是当它控制应用程序行为的时候。例如,支持 continuation 的框架通常允许使某个 continuation 无效。使某个 continuation 无效会导致无法返回与它对应的页面(例如,单击浏览器的 Back 按钮),并在重新提交表单之前修改关联的表单数据。(在系统内部,服务器删除了与指定 continuation
id对应的 continuation 对象)。结果,要继续执行操作却没有 continuation 可用,所以就会报告错误。这个错误可以用正在使用的开发框架的特定方式进行处理,例如,把浏览器重定向到出错页面。在某些情况下,排除这些动作,会对您的应用程序的处理开支提供更高层次的控制。正如前面讨论过的,有可能在 MVC 框架中使用脚本代码来禁止某些导航模式。continuation 恰恰可以让您更容易地这样做。

与 MVC 的实现不同,对于为了处理克隆而造成的代码混乱,基于 continuation 的技术提供了一个解决这个混乱的迂回解决方案。在基于 continuation 的技术中,用户可以在原来的窗口或克隆的窗口中输入不同的数据,把二者并行提交。然后在两个线程中(基本上,是分配给处理两个请求的服务器线程)用提交的两套数据继续执行 continuation。对于不是基于 continuation 的应用程序来说,这是经常发生的,而这个输出更合适一些:要么禁用这类特性,要么使用一个事务覆盖另一个事务。禁用这个特性通常不是一个好的选择,因为用户有时会用浏览器的克隆特性,对先后选择的两套数据进行对照分析。
还值得注意的是:基于 continuation 的方法消除了用户状态的概念。使用 continuation,用户在同一时间可以有多个状态,每个状态对应浏览器窗口中的一个克隆页面。
continuation 存储库要管理 Web 应用程序的 continuation,重要的是要维护一个
continuation 存储库。一个方法是使用一个包含由服务器维护的全局惟一 continuation
id的散列表,由该表提供 continuation 的基础设施。这没有消除用户从浏览器中复制和重用属于其他用户的 continuation
id。为了防止这种情况发生,也可以在用户的 HTPP 会话中维护 continuation。不管是哪种情况,如果在集群环境中运行,都有必要复制 continuation 存储库。前面提到过,使某个 continuation 无效会导致支持框架把整个对象从存储库中清除。在其他情况下,这类框架也支持指定 continuation 的生存周期,过期的 continuation 会自动从存储库清除。

把 continuation
id发送到用户浏览器,有两个选项:它可以作为一个隐藏字段内嵌在发送回的表单中;它也可以内嵌在表单要提交的 URL 中。不论怎么说,把 continuation
id封装在 cookie 中不是个好主意,因为特定的 cookie,对于一台机器上的浏览器窗口的所有克隆实例来说是公共的,而 continuation 则是特定于浏览器窗口的每一个实例。

到现在为止,我们已经谈得够多了。示范 continuation 的最好方法就是让您实际看到它们的作用。在下面几节中,我会用示例应用程序演示使用 continuation 开发 Web 应用程序是多么简单。要运行示例应用程序,则需要从 Apache 下载 Cocoon 框架,因为 Java 平台自身并不支持 continuation。请参阅,下载 Cocoon,并学习其他支持 continuation 的 Web 开发框架。
返回列表