3

我们正在将 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 来做到这一点。

可以很好地处理这个问题的一件事是延续。所以我检查了我是否可以使用这些,并惊讶于实际上有支持这种东西的库:Java 中的延续

在检查该问题中提到的库及其答案时,我遇到了这个声明

一旦规范最终确定,延续将被标准 Servlet-3.0 可暂停请求所取代。Jetty-7 的早期版本现已推出,可实现建议的标准挂起/恢复 API

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

所以问题是:

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

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

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

4

2 回答 2

2

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

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

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

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

  1. 阿贾克斯,反向阿贾克斯
  2. 异步与同步 servlet
  3. Jetty 8.0 及后续版本
于 2012-03-05T08:10:49.073 回答
0

我想说将 Swing 应用程序移植到 Web 应用程序的更合理的方法是使用GWT。这将使您不仅可以做您所要求的事情,而且还可以提供更快的 UI,因为客户端上会发生更多的处理(即没有到服务器的往返)。

此外,您可以重用大量现有的客户端代码,因为 GWT 几乎是标准的 Java(有一些限制)。

于 2012-03-05T08:03:57.043 回答