- ベストアンサー
【Java】投稿完了画面リロードによる多重レコードINSERTの防ぎ方
Java言語でホームページを作っているのですが、日記投稿機能で投稿完了画面をリロードすると、する度にDBにレコードが追加されてしまいます。この現象の原因と対策をどなたかご教授いただけないでしょうか。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
noname#49664
回答No.1
どのように作成されているのかがわからないのですが、投稿完了画面を表示するページ内に、データ挿入の処理もそのまま書いてありませんか? 例えば、 ページ1――送信フォーム ページ2――データを投稿し完了画面を表示 こんな具合になっていて、ページ1からページ2に送信する、というような形だと、送信後にページ2をリロードすると再度投稿処理が動いてしまい二重投稿されてしまいます。 一番簡単なのは、データ処理と完了画面を分けることでしょう。 ページ1――送信フォーム ページ2――データの投稿処理 ページ3――完了画面 こんな感じにして、ページ1からページ2に送信されると、そこで処理をした後、ページ3にリダイレクトする、という感じにするわけです。これならページ3をリロードしても関係ありませんから。 もっときちんと対応させたいのであれば、例えばページ1の送信フォームを表示する段階で、非表示フィールドなどにキーを割り当ててはどうでしょうか。ページをアクセスするたびに異なるキーが割り当てられ、投稿するとそのキーも保存される。その際、既に同じキーのレコードがあった場合には追加しないように処理するわけです。
お礼
Kyon2_PaPa様、ご丁寧にご回答いただき誠にありがとうございます。 入力フォームのhtmlで入力して、そこから検索機能用のServletへ飛んで、Servletから検索処理をして結果を返すビジネスロジックを呼んで、最後にサーブレットから投稿完了画面へフォワードしております。 フォワードではなくリダイレクトにすべきなのですね。理解いたしました。 また、hiddenでキーを割り当ててそれを見るやり方もあるのですね。ご教授いただきありがとうございます。 早速チャレンジいたします!