- - PR -
リクエストの2重送信を防止する方法
| 投稿者 | 投稿内容 | ||||
|---|---|---|---|---|---|
|
投稿日時: 2003-02-26 14:03
JSP(登録フォーム)
↓入力 Servlet(登録処理) ↓RequestDispacther#forward で転送 JSP(登録完了ページ) のような処理をしているのですが、 登録完了ページには転送元のURL(ServletのURL)が表示されるので、 ブラウザの更新ボタンを押すとリクエストがもう一度Servletに送信されて 2重登録されてしまいます。 sendRedirectを使うという手もあるのですが、 たとえば入力エラーを登録フォームに返送する際にSessionオブジェクトを 使う必要がでてきてしまいます。 forwardで転送するということを前提としてよい方法を御教授お願いいたします。 なお、サーブレットコンテナは tomcat 4.0.6 で、strutsなどのフレームワークは 使用していません。 | ||||
|
投稿日時: 2003-02-26 18:04
jerry さん、こんにちは。
登録成功時だけ sendRedirect して、 エラー時には、forward するというのじゃ駄目ですか? | ||||
|
投稿日時: 2003-02-26 18:17
何度もすみません。(^_^;
実際にやったことはないので、うまくいくかどうかは分からないのですが、 JavaScript で URL を書き換えるというのはどうでしょうか? 以下の記述で、登録完了ページがロードされた時に 現在の URL を()内の URL に書き換えることが出来るはずです。 <BODY onLoad="window.location.replace('http://www.xxx.xxx/xxx.jsp')"> いいかげんな回答で申し訳ないですが、良かったら試してみてください。 | ||||
|
投稿日時: 2003-02-26 20:05
アレクさん 返信ありがとうございます。
javascript の方法早速試してみたのですが、どうもうまくいきません。 javascript に関しては無頓着なのですが、 <BODY onLoad="window.location.replace('http://www.xxx.xxx/xxx.jsp')"> に設定するURIは”http://”からはじめなくてはならないのでしょうか? もしそうだとするとJSPにサーバ固有のアドレスを記述しなくてはならなくなりますよね? 移植性などを考慮するとそれはちょっと避けたいのですが、、、。 ちがってたらすみません。 ちなみに、 >>登録成功時だけ sendRedirect して、 >>エラー時には、forward するというのじゃ駄目ですか? の方法はこれから試してみようと思っています。 | ||||
|
投稿日時: 2003-02-26 23:49
申し訳ないです。 私も実際に JavaScript で試してみましたが、駄目ですね・・・。 URL 以前の問題でした。 ということで、今のところは sendRedirect と forward を 使い分けるのがよいかと思います。 たいして力になれず、申し訳ありません。 | ||||
|
投稿日時: 2003-02-27 09:41
JavaScriptでもできますよ。
送信ボタンのonClickで最初のクリックか2回目以降か調べられます。 下記のコードがサンプルです。
| ||||
|
投稿日時: 2003-02-27 09:44
上記のファンクションが間違っていました。
正しくは
です。 | ||||
|
投稿日時: 2003-02-27 15:53
>>たいして力になれず、申し訳ありません。
アレクさん、そんなことありません。 失敗したらforward、成功したらSendRedirectというのはうまくいきそうな気がします。 まだ実装していないのですが、実装したら報告しますね。 H2さん >>window.document.forms["FORM"].action = "http://...."; の部分はやはりプロトコル名から記述しないと動かないでしょうか? コンテキストパスからの指定ですとうまくいかないようです。 | ||||
