12、Struts2表单重复提交
生活随笔
收集整理的這篇文章主要介紹了
12、Struts2表单重复提交
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
- 表單的重復提交:
- 若刷新表單頁面, 再提交表單不算重復提交.
- 在不刷新表單頁面的前提下:
- 多次點擊提交按鈕
- 已經提交成功, 按 "回退" 之后, 再點擊 "提交按鈕".
- 在控制器響應頁面的形式為轉發情況下,若已經提交成功, 然后點擊 "刷新(F5)“
- 重復提交的缺點:
- 加重了服務器的負擔
- 可能導致錯誤操作.
- token(令牌)
- 用戶在訪問頁面時,我們要生成一個隨機的token值
- 將該值放入到session域中,同時放在表單隱藏域中
- 用戶提交請求時,隱藏域中token將會一起提交
- 服務器在處理請求時先要檢查請求參數中的token和session中的token是否一致
- 如果一致,則處理請求
- 否則,返回錯誤頁面
- 注意,token使用過一次以后必須要從session域中移除
- Struts 提供的 token 標簽可以用來生成一個獨一無二的標記. 這個標簽必須嵌套在 form 標簽的內部使用, 它將在表單里插入一個隱藏字段并把標記值(隱藏域的字段的值)保存在HttpSession 對象里.
- Token 標簽必須與 Token 或 TokenSession 攔截器配合使用, 這兩個攔截器都能對標記進行處理.
- Token 攔截器在遇到重復提交情況時, 會返回 invalid.token 結果并加上一個 Action 錯誤. 這種錯誤默認的消息是: The form has already been processed or no token was supplied, please try again.
- TokenSession 攔截器采取的做法只是阻斷后續的提交, 用戶將看到同樣的響應,但實際上并沒有重復提交
- 在 s:form 中添加 s:token 子標簽
- 生成一個隱藏域
- 在 session 添加一個屬性值
- 隱藏域的值和 session 的屬性值是一致的.
- 使用 Token 或 TokenSession 攔截器.
- 這兩個攔截器均不在默認的攔截器棧中, 所以需要手工配置一下
- 若使用 Token 攔截器, 則需要配置一個 token.valid 的 result
- 若使用 TokenSession 攔截器, 則不需要配置任何其它的 result
- Token VS TokenSession
- 都是解決表單重復提交問題的
- 使用 token 攔截器會轉到 token.valid 這個 result
- 使用 tokenSession 攔截器則還會響應那個目標頁面, 但不會執行 tokenSession 的后續攔截器. 就像什么都沒發生過一樣!
- 可以使用 s:actionerror 標簽來顯示重復提交的錯誤消息.
- 該錯誤消息可以在國際化資源文件中覆蓋. 該消息可以在 struts-messages.properties 文件中找到struts.messages.invalid.token=The form has already been processed or no token was supplied, please try again.
轉載于:https://www.cnblogs.com/MPPC/p/6134207.html
總結
以上是生活随笔為你收集整理的12、Struts2表单重复提交的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 参数化查询(简单举例)
- 下一篇: 【整理总结】Visual Studio