あるプログラムを書いているのですが、問題が発生しました。 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 が繰り返されるだけで、副作用はありません。
ここで欲しい熟語はどちらかです。
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リクエストを再送信することはありません。
データの送信や変更に GET を使用しないでください。代わりにPOSTを使用してください。フォームを以下のように変更します。
<form action="test.jsp" method="get">
詳しくはhttp://www.google.com/search?q=get+postを参照してください。
(あなたの質問も少し不明瞭です - ブラウザで更新するという意味ですか、それともコンテナ(例えばTomcat)でですか?ページの再投稿とはどういう意味ですか?ページが送信されるのではなく、フォームが送信されるのです。どのシステムですか?私はあなたが言いたいことを推測しましたが、もしあなたが他のことを言いたいのなら、教えてください)。