- - PR -
処理時間のかかる処理で「処理中です・・・」のような画面を表示させたい
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2007-05-05 16:09
いつもお世話になっております。
JavaServletを使用したアプリケーションで、 処理時間のかかる処理を行うので、 「submit」ボタンを押下後「処理中です・・・」の様な画面を表示させ、 処理が完了後に結果画面に遷移するようなものを作成したいです。 Aspでは以下のようなページを見つけたのですが、 同様にJavaServletで参考になるページや、実際に作成した人がいましたら ご教授ください。 http://www.res-system.com/item/84 | ||||
|
投稿日時: 2007-05-05 16:50
これとか参考になるでしょうか。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=7110&forum=12 | ||||
|
投稿日時: 2007-05-07 14:24
大雑把な流れは 1.submitでServletをキック 2.Servletで実際に処理するThreadを立ち上げる 3.Threadはセッションに保持しておく 4.Servletは「処理中です…」のHTMLを返す 5.HTMLに定時でのリロードを仕込んでおく(5秒おきぐらい) 6.リロードでServletを呼び出す 7.リロード処理ServletではセッションからThreadを読み出して 該当処理が完了したかを確認し、未完の場合は「処理中です…」のHTMLを返す 8.完了していた場合は結果のHTMLを返す といった感じなのですが、実際には途中でブラウザが閉じられた場合などに Threadを途中で殺すのか否か、多重起動を防ぐか否かといった考慮事項があります。 Threadの制御についてはマルチスレッド特有の問題がでてきますので 適切に同期処理を施す必要がありますので難易度は高めです。 | ||||
|
投稿日時: 2007-05-08 09:44
同期処理などを自前でやると難しいので、java5以上が使えるなら、java.util.concurrentパッケージのFutureTaskクラスや各種ExecutorServiceのsubmitメソッド(戻り値がFuture型)を使うといいですよ。 タスクを非同期に実行して、後で結果を取り出すことができます。 java.util.concurrentパッケージの解説については「Java並行処理プログラミング」がお勧めです。 | ||||
|
投稿日時: 2007-05-08 11:07
この前JavaScriptだけでやりましたが、
サブミット前に「処理中です。」みたいな内容をオーバーレイで表示する方法です。 Ajaxなどでありがちなインジケータ風画像を組み合わせると、それらしい雰囲気がでます。 |
1