Struts2 + jQuery-定期的な更新をクライアントに送信する
質問
クライアントがデータを入力して送信ボタンをクリックすることでレポートを生成できるように、Webアプリに機能を実装しています。
問題は、レポートの生成に時間がかかり、ユーザーが入力したデータが間違っているとレポートが生成されない可能性があることです。
完全なレポート生成タスクには多くのサブタスクがあり、クライアントが送信を押すと、そのページのすぐ下に、レポート生成タスクのステータス/進行状況をさまざまなサブタスクに分割して表示したい
- Validating input data ------ Done
- Fetching the data ------ In Progress
and so on,
WebレイヤーでStruts2、jQueryを使用してこれを達成するにはどうすればよいですか?
ご協力いただければ幸いです。
ありがとう
解決
同様の問題がありました。トランザクションには通常20秒かかり、場合によっては1分以上かかります。より簡単な解決策があると考えましたが、このようなスキームになりました
- 長時間実行中のリクエストを受信すると、セッションが作成され、リクエストを処理するための新しいスレッドが生成されます。
- 「Collecting data ...」を表示するテキストを含むページがすぐに返されます。このページには、毎秒更新されるタイマーが含まれています。リロードURLのクエリパラメーターにはセッションID(HttpSessionは使用しません)が含まれています。
- アクションハンドラは、セッションIDを含むリクエストを見ると、セッションが開始されたことを認識し、作業スレッドによって更新されている状態変数を確認します。完了していない場合は、ページを新しいステータス" Retrieving data from DB1 ..."で更新します。これをリロードとして実行すると、ちらつきが発生します。気になる場合は、AJAXを使用してステータスを更新できます。
- 作業スレッドが完了し、ページを配信する準備ができたら、呼び出しは単に結果を返します。
ロードバランサーに問題が発生しました。スキームが機能するには、すべてのリロードが同じサーバーに戻される必要があります。幸いなことに、ロードバランサーはセッションIDに基づいてスティッキールーティングをサポートしています。
他のヒント
Struts2 ExecuteAndWaitインターセプターを見てください。 http://struts.apache.org/2。 x / docs / execute-and-wait-interceptor.html
所属していません StackOverflow