1 JavaScript、変数を設定し、送信を 1 回だけ許可します。
<script language="javascript">
var checkSubmitFlg = false;
function checkSubmit() {
if (checkSubmitFlg == true) {
return
false;
}
checkSubmitFlg = true
}
document.ondblclick
= function docondblclick() {
.returnValue = false;
}
document.onclick
= function doconclick() {
if (checkSubmitFlg) {
window.event.returnValue = false
;
}
<html:form action="myAction.do" method="post" onsubmit="return checkSubmit();">
2 引き続き JavaScript を使用している場合は、送信ボタンまたは画像を無効に設定します
<html:form action="myAction.do"メソッド ="post"
onsubmit="getElById('submitInput').disabled = true; return true;">
<html:image styleId="submitInput" src="images/ok_b.gif" border="0" />
< / html:form>
3 Struts の同期トークン メカニズムを使用して、
Web アプリケーションでの繰り返し送信の問題を解決します。Struts はリファレンス実装も提供します。
基本原則:
受信リクエストを処理する前に、サーバーはリクエストに含まれるトークン値と現在のユーザー セッションに保存されているトークン値を比較し、一致するかどうかを確認します。リクエストが処理された後、応答がクライアントに送信される前に、新しいトークンが生成され、クライアントに渡されるだけでなく、このトークンはユーザー セッションに保存されている古いトークンも置き換えます。このようにして、ユーザーが前の送信ページに戻って再度送信した場合、クライアントから渡されたトークンはサーバー側のトークンと一致しないため、繰り返しの送信が効果的に防止されます。
if (isTokenValid(request, true)) {
// ここでのコード
returnmapping.findForward("success");
} else {
saveToken(request)
;
}
ユーザーセッションに基づく Struts ID と現在のシステム時刻は、一意の (セッションごとに) トークンを生成するために使用されます。具体的な実装については、TokenProcessor クラスのgenerateToken() メソッドを参照してください。
1. //トランザクション制御トークンを確認します。<html:form> は、
二重送信を防ぐために、セッション内の識別子に基づいて暗黙的な入力代表トークンを自動的に生成します。
//<input type="hidden" name ="org.apache.struts.taglib.html.TOKEN"
// value="6aa35341f25184fd996c4c918255c3ae">
if (!isTokenValid(request))
errors.add(ActionErrors.GLOBAL_ERROR,
new ActionError("error.transaction.token") ) ;
resetToken(request); //セッション
3 のトークンを削除します。アクションにはトークンを生成するメソッドがあります。
protected StringgenerateToken(
HttpSession session = request.getSession())
{
byte id[] = session .getId ().getBytes();
バイト now[] =
new Long(System.currentTimeMillis(
)).toString().getBytes();
MessageDigest.getInstance
("MD5")
;.update(now);
return (toHex(
md.digest()));
} catch (IllegalStateException e
) {
return(
null);
}