方法一:利用同步令牌(Token)機制來解決Web應用中重複提交的問題
這種做法只能是解決問題的一種做法,不過在大型項目中不可能用這種做法,此種做法不能根本解決問題,可以通過重寫URL跳過JS校正一樣提前到後台去。
一般項目中都是用令牌機制處理這個問題(以struts為例)
Struts的Token(令牌)機制能夠很好的解決表單重複提交的問題,基本原理是:伺服器端在處理到達的請求之前,會將請求中包含的令牌值與儲存在目前使用者會話中的令牌值進行比較,看是否匹配。在處理完該請求後,且在回覆發送給用戶端之前,將會產生一個新的令牌,該令牌除傳給用戶端以外,也會將使用者會話中儲存的舊的令牌進行替換。這樣如果使用者回退到剛才的提交頁面並再次提交的話,用戶端傳過來的令牌就和伺服器端的令牌不一致,從而有效地防止了重複提交的發生。
這時其實也就是兩點,第一:你需要在請求中有這個令牌值,請求中的令牌值如何儲存,其實就和我們平時在頁面中儲存一些資訊是一樣的,通過隱藏欄位來儲存,儲存的形式如:〈input type="hidden"name="org.apache.struts.taglib.html.TOKEN"value="6aa35341f25184fd996c4c918255c3ae"〉,這個value是TokenProcessor類中的generateToken()獲得的,是根據目前使用者的session id和目前時間的long值來計算的。第二:在用戶端提交後,我們要根據判斷在請求中包含的值是否和伺服器的令牌一致,因為伺服器每次提交都會產生新的 Token,所以,如果是重複提交,用戶端的Token值和伺服器端的Token值就會不一致。下面就以在資料庫中插入一條資料來說明如何防止重複提交。
struts1點麻煩,故此處不提供用例。
struts2就做得很好,只要是<s:form></s:form>這間加上<s:token/>就可以自動完成重複提交(原理同上
方法二:js
http://www.ibeifeng.com/bbs/read-htm-tid-13978.html
我提供一個簡單的方案用JavaScript解決
在表單中寫一個隱藏欄位<input type="hidden" value="false" name="resubmit "/>
如果第一次提交,就改變value="true" ;
再次提交時候,可以用JS 在用戶端判斷hidde值
var resubmit = false;
function checkCFSubmit()
{
if (resubmit )
{
return false;
}
else
{
resubmit= true;
return true;
}
然後在<form>中添加onsubmit="javascript:return checkCFSubmit();"
問題1
CSS樣式單的基本應用
問題2
Dojo的使用,實現動態效果,jar包的引入
問題3
顯示時間的js組件,下載使用
問題4 以及菜單如何?層級顯示,是屬於html標籤嗎,還是屬於表單(有序表單、無序表單)
問題5 HTML5
問題6 XML
問題7 Spring的思想
問題8 Hibernate的事務控制
問題9 存取權限控制實現,開發一個小模組,測試一下。
問題10 安裝oracle 找到我的留言板項目,實現BBS 分頁,暱稱,頭像,按照關鍵詞搜尋。。。(搜尋引擎有沒有現有的開源組件直接借鑒使用,按照使用者名稱搜尋使用者的留言,管理自己的留言,回複功能。。。。)