問題的產生原因
頁面提交給Action去進行業務處理,Action再跳轉回前臺頁面,但這時URL依然是“頁面提交給Action的鏈接”,這時前臺刷新一下頁面,就變成再次執行了一次提交操作。
解決思路
1,在Action頁面中跳轉的時候用重定向,可以在struts-config.xml中配置<forward ... redirect=“true”>
不過這種方法會使得request中放置數據丟失;
2,用Token令牌環來實現
提交到Action的時候,進行一系列操作,然后保存一個標志,這時再跳轉到前臺頁面。如果前臺頁面刷新的話,Action通過查看是否有標志,就能判斷用戶是刷新還是提交。
Action中操作令牌的方法
一: saveToken(HttpServletRequest request)
創建一個新令牌,并將其保存在當前用戶的會話中,如果用戶的會話不存在,將首先創建新會話對象
二: isTokenValid(HttpServletRequest request)
判斷存儲在當前會話中的令牌值和請求參數中的令牌值是否匹配,如果匹配,返回true,否則返回false 。
以下情況返回false:
1,用戶的HttpSession不存在
2,用戶Session中沒有保存令牌值
3,在用戶請求參數中沒有令牌值
4,存儲在用戶Session范圍內的令牌值和請求參數中 的令牌值不匹配
三:resetToken()
刪除保存在Session范圍內的令牌值
示例代碼
1,進入目標頁,如 http://www.bt285.cn ,通過IndexAction轉發,其中需要保存令牌:






























至此,大功告成!
完整示例請參考附件。