日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

在JSP客户端限制表单重复提交

發布時間:2025/7/14 javascript 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 在JSP客户端限制表单重复提交 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在客戶端限制表單重復提交有兩種方法:
???????? 第一種:在javascript腳本中設置一個標志變量,來區分表單是否已經提交。如果已經提交,則彈出對話框告訴用戶“重復提交”。
??????? 第二種:在單擊提交按鈕以后將提交按鈕設置為disabled狀態,這樣用戶就無法再提交按鈕,客戶端也就無法重復提交。
??????? 采用第一種方法:

1.新建一個ClientTest1.jsp文件,代碼如下:

?

<%@ page language="java" contentType="text/html; charset=Gb2312"
??? pageEncoding="GB2312"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Gb2312">
<title>客戶端限制重復提交</title>
<script language="javascript"
??? <!--定義重復提交標志變量 -->
??? var repeatSubmitFlag = false;
??? <!-- 重復提交檢查函數 -->
??? function checkSubmit()
??? {
??????? if(repeatSubmitFlag) <!-- 如果標志為true,則說明頁面已經提交 -->
??????? {
??????????? window.alert('禁止重復提交!');
??????????? return false;
??????? }
??????? else
??????? {
??????????? repeatSubmitFlag = true;
??????????? return true;
??????? }
??? }
</script>
</head>
<body bcolor="#ffffff">
??? <form name="form_client" action="http://www.dlmu.edu.cn" οnsubmit="return checkSubmit();">
??????? <input type="checkbox" name="check_1" checked=true/>大連海事大學
??????? <input type="submit" name="submitok"/>
??? </form>
</body>
</html>

?

? 2.如果重復提交表單就會彈出錯誤提示對話框

??? 采用第二種方法:
1.新建一個ClientTest2.jsp文件,代碼如下:

<%@ page language="java" contentType="text/html; charset=GB2312"
??? pageEncoding="Gb2312"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Gb2312">
<title>客戶端限制重復提交-2</title>
</head>
<body bgcolor="#ffffff">
??? <form name="form_client" action="http://www.dlmu.edu.cn"
??????? οnsubmit="window.document.form_client.submitok.disabled=true; return true;">
??????? <input type="checkbox" name="check_1" checked="true"/>大連海事大學
??????? <input type="submit" name="submitok"/>
??? </form>
</body>
</html>
2.如果重復提交表單就會彈出錯誤提示對話框?

?

3 利用struts的同步令牌機制  

  利用同步令牌(Token)機制來解決Web應用中重復提交的問題,Struts也給出了一個參考實現。

  基本原理: 

  服務器端在處理到達的請求之前,會將請求中包含的令牌值與保存在當前用戶會話中的令牌值進行比較,看是否匹配。在處理完該請求后,且在答復發送給客戶端之前,將會產生一個新的令牌,該令牌除傳給客戶端以外,也會將用戶會話中保存的舊的令牌進行替換。這樣如果用戶回退到剛才的提交頁面并再次提交的話,客戶端傳過來的令牌就和服務器端的令牌不一致,從而有效地防止了重復提交的發生。 

  if (isTokenValid(request, true)) {

   // your code here

   return mapping.findForward("success");

  } else {

   saveToken(request);

   return mapping.findForward("submitagain");

  } 

  Struts根據用戶會話ID和當前系統時間來生成一個唯一(對于每個會話)令牌的,具體實現可以參考TokenProcessor類中的generateToken()方法。  

  1. //驗證事務控制令牌,<html:form >會自動根據session中標識生成一個隱含input代表令牌,防止兩次提交

  2. 在action中:  

   //<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); //刪除session中的令牌  

  3. action有這樣的一個方法生成令牌  

   protected String generateToken(HttpServletRequest request) {  

   HttpSession session = request.getSession();

   try {

   byte id[] = session.getId().getBytes();

   byte now[] =

   new Long(System.currentTimeMillis()).toString().getBytes();

   MessageDigest md = MessageDigest.getInstance("MD5");

   md.update(id);

   md.update(now);

   return (toHex(md.digest()));

   } catch (IllegalStateException e) {

   return (null);

   } catch (NoSuchAlgorithmException e) {

   return (null);

   }

   }   

總結

以上是生活随笔為你收集整理的在JSP客户端限制表单重复提交的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。