jspで更新時に再送信しないようにするには?

あるプログラムを書いているのですが、問題が発生しました。 jspページを更新すると、システムが自動的にページ全体を再送信してしまいます。 それを回避する方法がわかりません。 誰か助けてくれませんか?

ソリューション

以下は、その説明です。

フォームの "submit" ボタンをクリックすると、フォームに入力されたすべてのデータを含むリクエストが Web サーバーに送信されます。URLだけでなくフォームのデータもリクエストの一部であり、このリクエストはブラウザによって記憶されます。ユーザーが "refresh"をクリックすると、ブラウザはリクエストを繰り返し、同じURL フォームデータを再びウェブサーバーに送信します。

しかし、フォームは、"form" タグの "method" 属性によって、GET または POST という 2 つの異なる方法で送信することができます。GETリクエストには副作用がないという慣例があります。データを取得するだけで、データベースには何の変更も加えません。一方、データを変更する場合は、常に POST リクエストを使用しなければなりません。しかし、非常に重要な違いは、ユーザーがPOSTを繰り返そうとすると、ブラウザが警告を表示することです。GETリクエストの更新時には、ブラウザはこの確認を表示しません。

あなたのフォームは、@mkさんが疑っているように、GETメソッドを使っていますか?もしそうなら、POSTメソッドに変更するのが最も簡単な解決策です。そうすれば、少なくともユーザーが更新しようとしたときに警告が表示されることになります。

しかし、より良い解決策は、@cletus が提案した POST+REDIRECT+GET のイディオムです。これは、データベースの更新 (POST) とビュー (GET) を 2 つの操作に分割するものです。ブラウザで更新をクリックすると、単に GET が繰り返されるだけで、副作用はありません。

解説 (3)

ここで欲しい熟語はどちらかです。

1.POST+REDIRECT+GET、または 2.AJAXによるフォーム送信。

POST+REDIRECT+GETは、次のように動作します。

1.フォーム送信はPOSTメソッドを使用します。 2.2. JSPまたは(できれば)サーブレットがPOSTを受信すると、必要なこと(データの保存や更新など)を何でも行います。 3.3. サーブレットまたはJSPは、Location.HTTPヘッダを使用して、ユーザーをLocation:HTTPヘッダを使用して、ユーザーをおそらく同じURLにリダイレクトします。

この利点は、再読み込みをクリックしてもフォームが再送信されないことです。また、ブラウザの戻るボタンをクリックしても、「再送信」ダイアログボックスが表示されることはありません。

以下は、そのJSPの例です。

AJAX送信とは、従来の方法でサーバーにフォームを送信する代わりに、フォームのデータでサーバーにAJAXリクエストを作成することです。この送信は必要なことを行います。再読み込みをクリックすると、単にページが再読み込みされます。AJAXリクエストを再送信することはありません。

解説 (3)

データの送信や変更に GET を使用しないでください。代わりにPOSTを使用してください。フォームを以下のように変更します。

詳しくはhttp://www.google.com/search?q=get+postを参照してください。

(あなたの質問も少し不明瞭です - ブラウザで更新するという意味ですか、それともコンテナ(例えばTomcat)でですか?ページの再投稿とはどういう意味ですか?ページが送信されるのではなく、フォームが送信されるのです。どのシステムですか?私はあなたが言いたいことを推測しましたが、もしあなたが他のことを言いたいのなら、教えてください)。

解説 (1)