有幾種方法:
1 在你的表單頁里HEAD區加入這段代碼:
<META HTTP-EQUIV="pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Cache-Control" CONTENT="no-cache, must-revalidate">
<META HTTP-EQUIV="expires" CONTENT="Wed, 26 Feb 1997 08:21:57 GMT">
2
生成一個令牌保存在用戶session中,在form中加一個hidden域,顯示該令
牌的值,form提交后重新生成一個新的令牌,將用戶提交的令牌和session
中的令牌比較,如相同則是重復提交
3
在你的服務器端控件的代碼中使用Response.Redirect("selfPage")語句。但是大多的數都不使用這種方法。
方法還有很多。。。
4
<input type="button" value="提交" onclick="this.disabled=true;this.form.submit()">
5
在JSP頁面的FORM表單中添加一個hidden域
<input type="hidden" name="url"value=<%=request.getRequestURL()%>>
在你的serverlet中添加如下語句
String url=request.getParameter("url");
response.sendRedirect(url);
我一般都是采用這樣的方法返回JSP頁面的,不太明白你說的重復刷新是什么概念
6 ajax 無刷新提交
7 Web開發中防止瀏覽器的刷新鍵引起系統操作重復提交
怎么解決呢?重定向可以解決頁面刷新帶來的數據的重復提交的問題,我們自然可以利用重定向的方式來解決這個問題。但是struts的action里面mapping.findword();跳轉的話,默認的是在工程文件夾里面找要跳轉的頁面。這種情況,怎么解決呢?
修改struts-config.xml 文件, 在action里面有一個redirect重新定向的屬性,struts中默認的是false,添加這個屬性,改成true,在forword中寫上要跳轉頁面的絕對或者相對地址就行了
修改如下:
<action-mappings>
<action attribute="newsActionForm" name="newsActionForm"
input="/addnews.jsp" path="/newsAction" parameter="method"
scope="request" type="com.yongtree.news.action.NewsAction">
<forward name="list" path="/listnews.jsp" redirect="true"></forward>
<forward name="error" path="/addnews.jsp"></forward>
</action>
</action-mappings>
重復提交、重復刷新、防止后退的問題以及處理方式
一。前言
你在任何一個比較專業的BBS都會看到這樣的問題,即使你Google一下,也會發現有很多的人在關注和詢問,但大家給出的解決方法卻都是千差萬別,(有的人主張采用腳本來解決;有的則想重定向到別的頁面;有的則將此問題提升到Token的角度)為什么會有如此大的差異呢?
二。問題場景
首先,我們應該先了解為什么要處理這樣的問題?或者專業一點就是它適合的場景是什么?(似乎只有人來問沒有人來解釋)
1。重復提交、重復刷新的場景
重復提交、重復刷新都是來解決系統重復記錄的問題。也就是說某個人在多次的提交某條記錄(為什么?也許是閑了沒有事情干的;最有可能是用戶根本就不知道自己的提交結果是否已經執行了??。?。
但出現了這樣的問題并不見得就必須處理,要看你所開發的系統的類別而定。比如你接手的是某個資源管理系統,系統本身從需求的角度根本就不允許出現"重復"的記錄,在這樣需求的約束條件下,去執行重復的提交動作只會引發“業務級異常”的產生,根本就不可能執行成功也就無所謂避免不避免的問題了。
2。防止后退的場景
了解了重復刷新、重復提交的場景,我們來了解一下"防止后退"操作的原因是什么?比如你在開發某個投票系統,它有很多的步驟,并且這些步驟之間是有聯系的,比如第一步會將某些信息發送給第二步,第二步緩存了這些信息,同時將自身的信息發送給了第三步。。。。。等等,如果此時用戶處在第三步驟下,我們想象一下某個淘氣用戶的用戶點擊了后退按鈕,此時屏幕出現了第二步驟的頁面,他再次的修改或者再次的提交,進入到下一個步驟(也就是第三步驟),錯誤就會在此產生?!什么錯誤呢?最為典型的就是這樣的操作直接導致了對于第一個步驟信息的丟失?。ㄈ绻@樣的信息是依靠Request存放的話,當然你可以存放在Session或者更大的上下文環境中,但這不是個好主意!關于信息存放的問題,下次在就這個問題詳細的討論)
三。如何處理的問題
當然很多的系統(比如訂票系統從需求上本身是允許個人重復訂票的)是必須要避免重復刷新、重復提交、以及防止后退的問題的,但即使是這樣的問題,也要區分如何處理以及在哪里處理的(網上只是告訴你如何處理,但很少去區分在哪里處理的),顯然處理的方式無非是客戶端或者服務器端兩種,而面對不同的位置處理的方式也是不同的,但有一點要事先聲明:任何客戶端(尤其是B/S端)的處理都是不可信任的,最好的也是最應該的是服務器端的處理方法。
客戶端處理:
面對客戶端我們可以使用Javascript腳本來解決,如下
1。重復刷新、重復提交
Ways One:設置一個變量,只允許提交一次。
<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();">
新聞熱點
疑難解答