java - 在 Servlet 3.0 API 中继续或暂停和恢复以与客户端通信?

标签 java continuations resume suspend servlet-3.0

我们正在将 Swing 两层应用程序迁移到 Web 应用程序(tomcat、Spring MVC、extJS,如果有任何不同的话)。

我们在应用程序中发现了这样的代码(简化的 Javaesc 伪代码)。

class DoSomethingComplicatedAction extends Action{
    public performAction(..){
        // do lots of stuff here
        // decend about 40 steps in the call stack
        answer = JOptionPane.showConfirmDialog()
        if (answer == something){
            // do something convoluted here
        } else {
            // do something even more convoluted here
        }
}

即在一些处理过程中,开始与用户进行一些交互。显然我不能直接用 servlet 来做到这一点。

可以很好地处理这个问题的一件事是延续。所以我检查了我是否可以使用它们并且惊讶地发现实际上有库可以实现这种东西:Continuations in Java

在检查该问题中提到的库及其答案时,我遇到了 this statement

Continuations will be replaced by standard Servlet-3.0 suspendable requests once the specification is finalized. Early releases of Jetty-7 are now available that implement the proposed standard suspend/resume API

但我找不到如何使用 Servlet 3.0 API 执行上述操作的示例

所以问题是:

  1. 是否可以使用 Servlet-3.0 API 完成以上操作而无需完全 将上面勾画的代码重构为两个或多个独立的代码 Action

  2. 如果以上问题的答案是肯定的:如何?是否有针对此用例或类似用例的完整示例?

  3. 我应该使用 Continuations 还是 Servlet API?或者,如果不能直接回答这个问题,那么这个决定取决于什么条件?

最佳答案

jetty 提出的 continuation api 是克服当时 servlet api 局限性的主要解决方法。 (一个请求,一个线程)

现在,您应该几乎只使用 Servlet 3.0。

请注意,在您的情况下,您甚至可能不需要做任何特殊的事情,因为 Actions 是重新激活的,您可以采用通常的 ajax 方式。

我正在添加一些相关链接:

  1. Ajax, Reverse Ajax
  2. Async vs sync servlets
  3. Jetty 8.0 and continuations

关于java - 在 Servlet 3.0 API 中继续或暂停和恢复以与客户端通信?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9484385/

相关文章:

java - 当用户按 Enter 时,EditText + Button onClick

Scheme:define 和 let 与 continuation 一起使用时有什么区别

c# - 使用 Unity 在 Android 上恢复应用程序

iphone - PhoneGap 事件未在 iPhone 上触发

createjs 暂停/恢复所有补间

java - 尝试重新创建 java.util.ConcurrentModificationException

Java - 数组值,内存地址还是?

Java MultiMap 无法识别键

c# - 异步/等待与手工制作的延续 : is ExecuteSynchronously cleverly used?

scala - 继续和理解 - 什么是不兼容?