- PR -

サーバー側での処理中にJSPを表示する方法。

1
投稿者投稿内容
カヌー
会議室デビュー日: 2003/01/14
投稿数: 19
投稿日時: 2003-03-10 17:42
いつも参考にさせていただいております。

現在、weblogic7+struts1.02で開発を行っており、サーバー側で時間のかかる処理を行っている間、画面に「処理中」をあらわすメッセージを表示させなければならないのですが、良い実現方法をご存知の方はいらっしゃいますでしょうか?

処理の流れは以下のような感じです。
ブラウザからsubmit→画面に「処理中」を表示→サーバー側での処理→処理終了後の画面表示

よろしくお願い致します。
asip
ベテラン
会議室デビュー日: 2001/12/27
投稿数: 77
投稿日時: 2003-03-10 21:34
1)「処理中」と表示する処理を行う
2)その後ろで"時間の掛かる処理"を行う
3)forwardなどを用いて無理矢理画面を遷移させる

上記の処理をJSPで実現すれば良いのでは?
カヌー
会議室デビュー日: 2003/01/14
投稿数: 19
投稿日時: 2003-03-11 11:54
asip様、ありがとうございます。
こちらでもそのように考えて、JSPを以下のように作成しました。

<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>
<html>
<body>
現在処理中です。
</body>
</html>
<logic:forward name="test"/>

しかし、以上のJSPは表示されずにサーバー側に処理が移ってしまいます。
バッファの制御が必要なのでしょうか?
ちなみに<%@ buffer size="none" %>を記述しても期待通りの動作はしてくれませんでした。
raystar
ぬし
会議室デビュー日: 2003/01/16
投稿数: 251
お住まい・勤務地: Tokyo/Japan
投稿日時: 2003-03-11 12:25
URL url = new URL("http://hogehoge.com/servlet/hogeServlet");
BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
これつかえませんか?
inに処理結果(HTML)が帰ってきますので
その値を条件判定したりできます。
この処理の跡にforwardしてはどうでしょう。

ぱっと、思いつきですみません。

[ メッセージ編集済み 編集者: raystar 編集日時 2003-03-11 12:24 ]
tommy
会議室デビュー日: 2003/03/11
投稿数: 15
投稿日時: 2003-03-11 19:09
引用:

1)「処理中」と表示する処理を行う
2)その後ろで"時間の掛かる処理"を行う
3)forwardなどを用いて無理矢理画面を遷移させる

上記の処理をJSPで実現すれば良いのでは?


上記のやり方ではうまく行かないと思います。なぜなら、
・「2)その後ろで」という部分をどう実現するのか、
・「3)forwardなどを用いて」しまうと、クライアントに制御が移るタイミングがない
という2つの問題が解決されないからです。

そこで、次の流れではどうでしょうか。
1) Servlet は Request を受け取り、時間のかかる処理を Bean に依頼する(スレッド実行)
2) Servlet は Session に Bean をセットする
3) Servlet は JSP に Redirect する
4) JSP は Session から Bean を取り出し、進捗状態を問い合わせて表示する
5) JSP は一定時間を経過するごとに Refresh する(自URLに対して)

参考url:http://java-house.jp/ml/archive/j-h-b/047889.html#body
※一連のスレッドを辿ってみるとよいと思います。
raystar
ぬし
会議室デビュー日: 2003/01/16
投稿数: 251
お住まい・勤務地: Tokyo/Japan
投稿日時: 2003-03-11 22:15
アドバイスしておいて
申し訳ないですが、
たしかにforward失敗しましたね。
metaタグのリフレッシュが効果的のようです。
sugimoto
常連さん
会議室デビュー日: 2002/12/05
投稿数: 45
投稿日時: 2003-03-12 09:46
いつも楽しく見させてもらってます。

まったく方向性が変わってしまい、見当違いですが、
iframe なんかが可能なら、JavascriptとHTMLで実現するという手もどうでしょう?
コードのテストをしていないので、バグがあるかもしれません。

<!-- 送る前のHTML(JSP) -->
<html>
<head>
<script>
function go() {
var str = "処理中です・・・";
document.all.a.innerHTML = str;
document.send_form.submit();
}
</script>
</head>
<body>
<div id="a">
<form name="send_form" target="hidden_page" action="ShoriServlet">
<inpupt type="text" name="aaa" />
<input type="button" value="実行" onclick="go();" />
</form>
</div>
<iframe name="hidden_page" width="0px" height="0px" src="" />
</body>
</html>

<!-- 処理後にこっそり表示されるHTML(JSP) -->
<html>
<head>
<script>
function next() {
alert("処理完了!");
parent.location.href="next_page.jsp";
}
</script>
</head>
<body onload="next();">
</body>
</html>

思わず、innerHTMLを使ってしまいましたが、
スタイルシートのdisplay等を使っても良いかもしれません。


[ メッセージ編集済み 編集者: sugi 編集日時 2003-03-12 10:52 ]
カヌー
会議室デビュー日: 2003/01/14
投稿数: 19
投稿日時: 2003-03-12 15:56
皆様、返答ありがとうございます。

ぜひ参考にさせていただきます。
また、こちらで他に良い手段が見つかったら参考までにここに投稿したいと思います。
1

スキルアップ/キャリアアップ(JOB@IT)