token解決重複提交問題

如果避免重複提交呢?
請知道的詳細說下,或者把文章的鏈接地址寫下也好。
應用環境是tomcat,struts1.2,jsp,hibernate
下面是問題,請看到後能給一個解決方案。
1。如果點擊一次提交按鈕後,服務器開始處理,在後臺的代碼中使用struts的token機制控制重複提交 。然後服務器處理完畢返回到一個新的列表頁面。此時刷新頁面,則服務器當作重複提交對待。

2。如果點擊一次提交按鈕後,服務器開始處理,在後臺的代碼中使用struts的token機制控制重複提交 。然後服務器處理時發生一個異常,於是返回一個錯誤頁面,告訴用戶哪個字段有錯誤,然後用戶點擊返回按鈕,返回上一個頁面,再次提交頁面時,用戶器則把這次的提交當作了重複提交對待。

3。如果點擊一次提交按鈕後,服務器開始處理,在後臺的代碼中使用struts的token機制控制重複提交 ,服務器還沒有處理完畢時,用戶等不及了,再次單擊提交按鈕,則struts的token機制不會把此當作重複提交,而是會兩樣處理這次的提交。

jsp 中插入代碼 <s:taken/>


<form name="form" id="creditChangeform" method="post">
	<s:token></s:token>
</form>

 

struts.xml中配置

<action name="addcashpoint" class="com.action.member.MemberCashPointAction" method="addCashPoint">
            <interceptor-ref name="defaultStack"/>
            <interceptor-ref name="token"/>
            <result name="invalid.token">/WEB-INF/error.jsp</result>
 </action>

 

 

Web應用的無限制特性會給你的應用帶來很多問題。這裏的問題是客戶端控制 着訪問Web應用的請求,你可能得到非預期的不同順序的Web應用請求,或者多次得到相同的請求。當用戶不止一次單擊Web表單的提交按鈕時就會發生這個 問題。因爲在每次單擊時瀏覽器都會發送表單的請求信息,或者表單提交成功並顯示新頁面以後,你單擊重新加載按鈕也會發生問題。這種情況相當危險,因爲表單 提交是要求服務器完成某種操作的信號,並且許多action(比如,在兩個銀行賬戶之間轉賬)不應該執行多次。

WebWork的一個高級特性是默認提供檢查重複提交的機制,WebWork可以爲每個表單提供一個獨一無二 的標記(token)。WebWork通過以下方式支持這個特性。首先WebWork爲視圖端提供一個<ww:token>JSP標籤,然後 在action運行之前使用interceptor檢驗表單標記(token)是否正確。如圖15-4所示,這兩個部分 (<ww:token>和interceptor)通過保存在session中的狀態一起工作,然後在允許action運行之前檢查標記 (token)的名稱和值是否正確。請注意,表單標記(token)只是解決問題的一個部分。爲了最大可能地減少用戶偶爾重新提交表單的機會,你在處理完 提交的表單以後應該使用redirect重新轉發結果。

圖15-4  標記(token)標籤和標記(token)interceptor在一起工作,
用於在action每次執行前驗證token

發佈了38 篇原創文章 · 獲贊 0 · 訪問量 3459
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章