3

私たちは、Swing 2 層アプリケーションを 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-3.0 中断可能リクエストに置き換えられます。提案された標準の一時停止/再開 API を実装する Jetty-7 の初期リリースが利用可能になりました

しかし、Servlet 3.0 API を使用して上記のようなことを行う方法の例を見つけることができませんでした

質問は次のとおりです。

  1. 上記のコードを 2 つ以上の個別のアクションに完全にリファクタリングすることなく、Servlet-3.0 API を使用して上記を実行できますか?

  2. 上記の答えが「はい」の場合: どのように? これまたは同様のユースケースのある程度完全な例はありますか?

  3. Continuations または Servlet API を使用する必要がありますか? または、これに直接答えられない場合、この決定はどのような条件に依存しますか?

4

2 に答える 2

2

jetty によって提案された継続 api は、当時のサーブレット api の制限を克服するための主要な回避策でした。(1 つの要求、1 つのスレッド)

これで、ほとんどの場合、Servlet 3.0 のみを使用する必要があります。

あなたの場合、アクションは再アクティブであり、通常の ajax の方法を使用できるため、特別なことをする必要さえない場合があることに注意してください。

関連するリンクをいくつか追加しています。

  1. アヤックス、リバースアヤックス
  2. 非同期サーブレットと同期サーブレット
  3. Jetty 8.0 と継続
于 2012-03-05T08:10:49.073 に答える
0

Swing アプリケーションを Web アプリケーションに移植するためのより合理的なアプローチは、GWTを使用することです。これにより、求めていることを実行できるだけでなく、クライアントでより多くの処理が行われるため (つまり、サーバーへのラウンドトリップがなくなるため)、はるかに高速な UI が提供されます。

また、GWT はほぼ標準の Java (いくつかの制限付き) であるため、既存のクライアント コードの多くを再利用できます。

于 2012-03-05T08:03:57.043 に答える