プロが教えるわが家の防犯対策術!

Java言語でホームページを作っているのですが、日記投稿機能で投稿完了画面をリロードすると、する度にDBにレコードが追加されてしまいます。この現象の原因と対策をどなたかご教授いただけないでしょうか。

A 回答 (1件)

どのように作成されているのかがわからないのですが、投稿完了画面を表示するページ内に、データ挿入の処理もそのまま書いてありませんか? 例えば、



ページ1――送信フォーム
ページ2――データを投稿し完了画面を表示

こんな具合になっていて、ページ1からページ2に送信する、というような形だと、送信後にページ2をリロードすると再度投稿処理が動いてしまい二重投稿されてしまいます。

一番簡単なのは、データ処理と完了画面を分けることでしょう。

ページ1――送信フォーム
ページ2――データの投稿処理
ページ3――完了画面

こんな感じにして、ページ1からページ2に送信されると、そこで処理をした後、ページ3にリダイレクトする、という感じにするわけです。これならページ3をリロードしても関係ありませんから。

もっときちんと対応させたいのであれば、例えばページ1の送信フォームを表示する段階で、非表示フィールドなどにキーを割り当ててはどうでしょうか。ページをアクセスするたびに異なるキーが割り当てられ、投稿するとそのキーも保存される。その際、既に同じキーのレコードがあった場合には追加しないように処理するわけです。
    • good
    • 0
この回答へのお礼

Kyon2_PaPa様、ご丁寧にご回答いただき誠にありがとうございます。

入力フォームのhtmlで入力して、そこから検索機能用のServletへ飛んで、Servletから検索処理をして結果を返すビジネスロジックを呼んで、最後にサーブレットから投稿完了画面へフォワードしております。

フォワードではなくリダイレクトにすべきなのですね。理解いたしました。
また、hiddenでキーを割り当ててそれを見るやり方もあるのですね。ご教授いただきありがとうございます。

早速チャレンジいたします!

お礼日時:2007/10/04 10:20

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!