1. web項目防止重復提交,有什麼好的方式
Struts的Token(令牌)機制能夠很好的解決表單重復提交的問題,基本原理是:伺服器端在處理到達的請求之前,會將請求中包含的令牌值與保存在當前用戶會話中的令牌值進行比較,看是否匹配。在處理完該請求後,且在答復發送給客戶端之前,將會產生一個新的令牌,該令牌除傳給客戶端以外,也會將用戶會話中保存的舊的令牌進行替換。這樣如果用戶回退到剛才的提交頁面並再次提交的話,客戶端傳過來的令牌就和伺服器端的令牌不一致,從而有效地防止了重復提交的發生。
這時其實也就是兩點,第一:你需要在請求中有這個令牌值,請求中的令牌值如何保存,其實就和我們平時在頁面中保存一些信息是一樣的,通過隱藏欄位來保存,保存的形式如:〈input type="hidden" name="org.apache.struts.taglib.html.TOKEN" value=""〉,這個value是TokenProcessor類中的generateToken()獲得的,是根據當前用戶的session id和當前時間的long值來計算的。第二:在客戶端提交後,我們要根據判斷在請求中包含的值是否和伺服器的令牌一致,因為伺服器每次提交都會生成新的 Token,所以,如果是重復提交,客戶端的Token值和伺服器端的Token值就會不一致。下面就以在資料庫中插入一條數據來說明如何防止重復提交。
在Action中的add方法中,我們需要將Token值明確的要求保存在頁面中,只需增加一條語句:saveToken(request);,如下所示:
public ActionForward add(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
//前面的處理省略
saveToken(request);
return mapping.findForward("add");
}在Action的insert方法中,我們根據表單中的Token值與伺服器端的Token值比較,如下所示:
public ActionForward insert(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
if (isTokenValid(request, true)) {
// 表單不是重復提交
//這里是保存數據的代碼
} else {
//表單重復提交
saveToken(request);
//其它的處理代碼
}
}
2. j2ee的web項目怎麼防止,重復提交的問題
Struts的Token(令牌)機制能夠很好的解決表單重復提交的問題,基本原理是:伺服器端在處理到達的請求之前,會將請求中包含的令牌值與保存在當前用戶會話中的令牌值進行比較,看是否匹配。在處理完該請求後,且在答復發送給客戶端之前
3. 在web開發中怎麼解決重復提交的
1 javascript ,設置一個變數,只允許提交一次。
<script language="javascript"> var checkSubmitFlg = false; function checkSubmit() { if (checkSubmitFlg == true) { return false; } checkSubmitFlg = true; return true; } document.ondblclick = function docondblclick() { window.event.returnValue = false; } document.onclick = function doconclick() { if (checkSubmitFlg) { window.event.returnValue = false; } }</script>
<html:form action="myAction.do" method="post" onsubmit="return checkSubmit();">
2 還是javascript,將提交按鈕或者image置為disable
<html:form action="myAction.do" method="post" onsubmit="getElById('submitInput').disabled = true; return true;"> <html:image styleId="submitInput" src="images/ok_b.gif" border="0" /> </html:form>
4. 怎麼防止重復提交
最簡單的就是js處理,當用戶點擊提交按鈕後用js將按鈕置為不可用,如下代碼:(代碼是網上找到的 大概意思如下)
<inputtype="button"value="提交"onclick="this.disabled=true;this.form.submit()">
這種只能防止用戶點擊,但是如果用戶刷新頁面就回再次請求
可以用同步令牌(Token)機制來解決Web應用中重復Form表單提交的問題 ,比如struts就支持
5. Javaweb分頁為什麼多次點擊就卡了
Javaweb分頁多次點擊就卡了原因:感覺要不在線程方面,要不就是個人電腦IE方面。
一個是資料庫的訪問量,是否很大!第二就是你代碼寫的過於繁瑣了需要簡化,數據資源最好不要浪費,在傳值的時候最好能夠做一下處理, 如果一次需要傳出大量的數據到頁面上,我建議你倒不如在ArrayList里 一段一段的取過來!
總的來說,js解決方案是基本可以防止重復點擊提交按鈕造成的重復提交問題,但是前進後退操作,或者F5刷新頁面等問題並不能得到解決。最重要的一點,前端的代碼只能防止不懂js的用戶,如果碰到懂得js的編程人員,那js方法就沒用了。
主要框架:
Java的Web框架雖然各不相同,但基本也都是遵循特定的路數的:使用Servlet或者Filter攔截請求,使用MVC的思想設計架構,使用約定,XML或 Annotation實現配置,運用Java面向對象的特點,面向對象實現請求和響應的流程,支持Jsp,Freemarker,Velocity等視圖。
6. JS WEB前端開發如何防止重復提交的實現方
定義一個變數。
var flag= 0;
如果flag=0 就讓提交
在提交後,數據沒有返回來前,將flag=1
數據返回來後再設置成0
這樣就能防止重復提交。非常有效。
7. 怎麼不讓java web中表單中的某一個數據重復提交
[javascript] view plain
package cn.com.form;
import java.io.IOException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Random;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import sun.misc.BASE64Encoder;
//產生表單
public class FormServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//產生隨機數
TokenProcessor tp=TokenProcessor.getInstance();
String token=tp.generateToken();
request.getSession().setAttribute("token", token);
request.getRequestDispatcher("/form.jsp").forward(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request,response);
}
}
class TokenProcessor//令牌
{
8. 安卓開發 怎麼避免重復提交請求
web前端數據請求或者表單提交往往通過對dom的點擊事件來操作,但是往往因為認為點擊過快(少年手速挺快的嘛),或者因為響應等待使得用戶誤人為沒操作而重復很多次點擊,造成表單數據的連續重復提交,造成用戶體檢的不好,甚至影響到整個系統的安全性。而前端的防治重復提交至少很有效的防治了人為正常操作下的很多不必要麻煩。下面就來講講如何有效避免前端的表單重復提交 表單提交有以下幾種方式: <form name=」form」 method=」post」 action=」#"> <input type=」submit」 name=」submit」 value=」提交"> </form> 另外,還有一種常用的方法是使用圖片: 代碼如下: <form name=」form」 method=」post」 action=」# "> <input type=」image」 name=」submit」 src=」btnSubmit.jpg」> </form> 第三種是使用鏈接來提交表單,用到了javascript的DOM模型: 代碼如下: <form name=」form」 method=」post」 action=」#」> <a href=」javascript:form.submit();」>提交</a> </form> 實際上這一種是通過js 進行提交。可以理解成 $("form").find("a").click(function(){ $("form").submit(); }); 第一種和第二種可以用js來: $("input[type='submit']").click(function(){ $("form").submit(); }); $("input[name='submit']").click(function(){ $("form").submit(); }); 總之,都是對form進行提交,當然還有出了表單提交還有些請求也要防治重復,比如響應某個事件的ajax請求(提交數據) $.ajax({ url: url, type: "post", data: data, success: function (data) { callback; } }); 那麼前面這些提交和請求在網路和性能因素上導致不能及時網路響應並且在事件多次響應時造成的重復,除非在提交響應完成前的點擊(觸發事件)視為無效,等當前響應完了再去響應下一個請求 如果是表單按鈕我們可以這樣在點擊後將按鈕disabled掉 $("input[type='submit']").click(function(){ $(this).attr("disabled",true); $("form").submit(); }); 按道理來說,將點擊後將按鈕disabled設為true時按鈕就不能點擊了那麼第二次以後點擊就無效了,但這樣做你會發現同時第一次點擊的表單也無法正常提交了(好像是h5的標准後才不行的,無論怎樣h5標準的瀏覽器我試了試都不行),看來是disabled影響了表單的提交,那麼先提交後disabled看行不行 $("input[type='submit']").click(function(){ $("form").submit(); $(this).attr("disabled",true); }); 實驗結果 ,這樣也不行,我們不能猜想submit()回調在click函數最後執行並且.submit()函數內部應該對disabel做了判斷(假設這是瀏覽器內部機制原理),反正在當前這個交互周期里disabled了就不能submit 那麼我們可以拋開disabled用代碼邏輯來防治重復 $("input[type='submit']").click(function(){ if(!$(this)[0].repeat){ $(this)[0].repeat=true; $("form").submit(); } }); 在當前點擊的按鈕如果沒有repeat的話就進入提交並且設置個值為true的repeat屬性,當第二次進來的時候發現有這個屬性就不提交,看似這樣的邏輯會防治重復提交了,但是事實永遠都是殘酷的! 是的,當點擊過快的時候還是會重復提交,這是因為,如果click里沒執行submit的時候html默認的type=submit 的input點擊操作會提交表單,舉個完整的例子 <form name=」form」 method=」post」 action=」#"> <input type=」submit」 name=」submit」 value=」提交"> </form> <form name=」form」 method=」post」 action=」#"> <input type=」submit」 name=」submit」 value=」提交"> </form> $("input[type='submit']").click(function(){ console.log("here is click too!"); }); <form name=」form」 method=」post」 action=」#"> <div>提交</div> </form> $("form").find("div").click(function(){ $("form").submit(); }); 這三個代碼都是一個效果提交表單,但是!!!!!!!!!!我們發現阻止表單提交的不就是在當前交互周期(一次點擊-》響應-》回調)里,將submit按鈕disabled掉嗎,好的,少年上代碼 $("form").find("div").click(function(){ if(!$(this)[0].repeat){ $(this)[0].repeat=true; $(this).closest("form").submit(); }else{ $(this).attr("disabled",true); } }); 看到沒有,第二次點擊的時候就disabeld掉了,所以只有第一次成功,第二次的就不會提交了! 當然,如果是其他dom元素防治重復點擊那就更簡單了 $("div").click(function(){ if(!!$(this)[0].isRepeat){ return; } $(this)[0].isRepeat=1; $.ajax({ url: url, type: "post", data: data, success: function (data) { $(this)[0].isRepeat=0; callback; } }); }); 因為submit()會刷新試圖,而ajax不會,所以在回調後需要把判斷重復的那個屬性賦值為false 這是不是就更簡單?我想你會這樣認為的! 以上所述是小編給大家介紹的JS WEB 前端開發中防治重復提交的實現方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網站的支持!
9. javaweb防止表單重復提交的幾種解決方案
1.js方法解決:關於js方法解決就是說通過js動態控制提交按鈕不能多次點擊,或者多次點擊不起作用。
方案一:通過設立標識使表單不能重復提交:
要強調的是,利用session方法解決表單重復問題是十分完美的,基本上可以應對各種重復提交問題。
但!是不是之前在客戶端防止表單重復提交的種種方法就不使用了呢?
答案是否定的,我們需要多種方法混合使用才能達到最好的效果,也許有人會問,不是說session方法基本可以應對各種重復提交問題了嗎?
這里我們所說的達到最好效果指的是,給用戶更好地體驗,例如用戶點擊了提交按鈕,這時將按鈕變為不可用的,用以告訴用戶你已經提交內容了,不可重復提交。還有如果無論什麼情況都用session防止表單重復提交問題,反而無形的增加了伺服器端的負擔。
10. .net中防止刷新頁面重復提交數據的幾種方法
1.提交數據後,對頁面進行重定向(可以重定向到本頁或其他頁面)。例子:
Response.Write( " <script language=javascript alert( '操作成功 ');window.location.href=window.location.href; </script ");
2.利用Session,第一次提交數據時把Session設置一個值,如果重復提交的話判斷這個Session是否有值存在就可以了。
3.區分是:刷新還是提交(摘抄)
DetectRefresh.aspx
===========================
<%@ Page Inherits= "StevenBey.Web.UI.Page " %<html<head<title Detecting Page Refresh [Demo] </title</head<body<form runat= "server "
<asp:button Text= "Test Refresh " runat= "server " /</formIsRefresh = <%= IsRefresh %</body</htmlStevenBey.Web.UI.Page.cs
======================
namespace StevenBey.Web.UI{public class Page : System.Web.UI.Page{private bool _refreshState;
private bool _isRefresh;
public bool IsRefresh{get{return _isRefresh;}}protected override void LoadViewState(object savedState){object[] allStates = (object[]) savedState;
base.LoadViewState(allStates[0]);
_refreshState = (bool) allStates[1];
_isRefresh = _refreshState == (bool) Session[ "__ISREFRESH "];}protected override object SaveViewState(){Session[ "__ISREFRESH "] = _refreshState;
object[] allStates = new object[2];