プロジェクトでフォームの繰り返し提出の問題を解決するために、次のような繰り返しフォームの提出が発生する可能性のある通常のプロジェクトには、次の状況があります。
1.サーバーまたはネットワークの遅延が遅いため、[送信]ボタンを繰り返しクリックします
2。提出は正常に完了しましたが、成功したページは更新されました
3.提出は正常に完了しました。フォールバックして、[送信]ボタンをもう一度クリックします。
これらの状況はすべて、データベースおよび廃棄物データベースリソースで同じ冗長データを生成することができます。転送のみが表示され、リダイレクトは発生しません。
最初のケースのソリューション(JavaScriptを使用)は、後者の2つでは機能しません。
最初に次の形式でJavaScriptコードをページに追加します
var submitflag = false; function checksubmit(){if(!submitflag){submitflag = true; document.forms [0] .submit(); }}(1)[送信]ボタンの型属性がボタンである場合:
ボタンをonclick =” checksubmit();”を設定するだけです。
(2)送信ボタンの型属性が送信された場合:
ボタンのonclick = "checksubmit();"を設定します。 onsubmit = "returnfalse"を<form>タグに追加します。送信ボタンが自動的に送信されると、クリックイベントが送信された後、OnSubmitが「ReturnFalse」に設定されているため、送信ボタンの自動提出が無効になります。
次の2つの状況では、セッションを使用して問題を解決できます。原則は、情報追加ページを実行するときにセッションに情報を配置し、ページで処理するために情報をサーブレットに送信することです。サーブレットはセッションで情報を取得します。セッションに空でない情報がある場合は、データベースに情報を挿入してから、セッション内の情報を削除します。セッションの情報は、次にフォームが送信されるときに空になり、保存された情報プロセスは実行されません。
ただし、単にセッションを使用するには制限があるため、実際の開発では、一般にUUIDと組み合わせてセッションを使用してフォームの繰り返し提出を解決するために使用されます。コードは次のとおりです。
uuidtokenクラスを定義します
public class uuidtoken {private static uuidtoken uuidtoken = new uuidtoken(); private uuidtoken(){} public static uuidtoken getuuidtoken(){return uuidtoken;} public synchronized string getuuidasstr(httpservletretrestessions = stringsossions(); uuidstr = uuid.randomuuid()。toString(); if(uuidstr!= null){session.setattribute( "session.uuid"、uuidstr);}/*** uuidがセッションで救われたuuidとuuidのuuidが均等であるかどうかを判断します*/*** isuuidvalidate(httpservletrequest request){//既存のセッションhttpsession session = request.getsession(false); if(session == null){return false;} string sessionuuid =(string)session.getattribute( "session.uuid"); if(sessionuuid null){return fals htmlluuid = request.getParameter( "html.uuid"); if(htmlluuid == null){return false;} return sessionuuid.equals(htmlluuid);}/** * delete uuid */public synchronized resetuid(httpservletletreletrefrequest request){ session = request.getSession(false); if(session == null){return;} session.RemoveAttribute( "session.uuid");}}}JSPページに非表示ドメインを追加し、UUIDを使用して一意の識別番号を生成し、非表示ドメインに割り当て、一意の識別番号をセッションのコピーに配置します。コードは次のとおりです。
<入力型= "hidden" name = "html.uuid" value = '<%= uuidtoken.getuuidtoken()。getuuidasstr(request)%>'>
サーブレットに送信した後、JSPページの非表示ドメインの値を取得し、非表示ドメインの値をセッションに配置された値と比較します。同じ場合は、データを保存し、セッションからUUIDを削除します。それが同じでない場合、それは繰り返される提出であり、処理が実行されないことを意味します。
boolean flag = uuidtoken.getuuidtoken()。isuuidvalidate(request); if(flag){//データベースに情報を保存する// delete uuidtoken.getuuidtoken()。resetuuid()。要約します
上記は、セッションを使用してフォームの繰り返しの提出を防ぐことに関するこの記事の簡単な議論についてです。私はそれが誰にでも役立つことを願っています。興味のある友人は、このサイトの他の関連トピックを引き続き参照できます。欠点がある場合は、それを指摘するためにメッセージを残してください。このサイトへのご支援をありがとうございました!