2012-02-01 40 views
0

這種情況是這樣的,我接受用戶在網頁上的一個unicode字符串,並點擊提交按鈕控件移動到下一頁,其中處理字符串的完整邏輯是通過在bean類內部調用DAO類的函數來將字符串插入到數據庫中以便維護日誌,同時使用bean類編寫。在點擊提交按鈕時僅插入唯一值

問題在於,當用戶刷新結果頁面時,bean類會一再地被調用,因此相同的字符串會被同一用戶多次插入到數據庫中。

我應該怎麼做,以便只有當用戶在刷新結果頁時不按下提交按鈕時,同一用戶插入的字符串纔會插入到數據庫中。 或者我應該維護cookie的字符串作爲來自用戶的值,並在頁面加載時檢查它。

我試圖維持對先前由用戶輸入的字符串客戶端的cookie,並相應檢查

private void fnSetCookieValues(HttpServletRequest request, 
           HttpServletResponse response) {   
    Cookie[] cookies=request.getCookies(); 
    for (int i = 0; i < cookies.length; i++) {      
    System.out.println("" + cookies.length + "Name" + cookies[i].getName()); 
    if(cookies[i].getName().equals("DNString")) { 
     System.out.println("Inside if:: " + cookies[i].getValue() + 
         "" + cookies.length); 
     cookies[i].setValue(request.getParameter("txtString")); 
    } else { 
     Cookie ck = new Cookie("DNString", ";"); 
     response.addCookie(ck); 
}   
    } 
} 

這段代碼寫在小服務程序都會調用上提交按鈕點擊 但是這個servlet的每個處理都會顯示1NameJSESSIONID它沒有顯示cookie DNString

任何人都可以找出我正在做的錯誤嗎?

回答

0

您正在尋找一種方法來防止雙重提交? 有一對夫婦的方法,根據您的安全需要和您所使用的框架:

  1. Java腳本
  2. 令牌
  3. 同步

谷歌了一下週圍。那裏有很多很多的解決方案。

感謝, 中號

0

這是不檢查數據是否已輸入不是好辦法。 因此,解決此問題的一個簡單方法是在您的servlet提交表單後使用HTTP重定向。請致電success.jsp。因此表單不會再提交。

您也可以在獲得回覆後重置表單。

For More check here