日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

12、Struts2表单重复提交

發布時間:2025/4/9 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 12、Struts2表单重复提交 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
  • 什么是表單重復提交
    • 表單的重復提交:
    • 若刷新表單頁面, 再提交表單不算重復提交.
    • 在不刷新表單頁面的前提下:
      • 多次點擊提交按鈕
      • 已經提交成功, 按 "回退" 之后, 再點擊 "提交按鈕".
      • 在控制器響應頁面的形式為轉發情況下,若已經提交成功, 然后點擊 "刷新(F5)“
    • 重復提交的缺點:
      • 加重了服務器的負擔
      • 可能導致錯誤操作.
    • token(令牌)
    • 用戶在訪問頁面時,我們要生成一個隨機的token值
    • 將該值放入到session域中,同時放在表單隱藏域中
    • 用戶提交請求時,隱藏域中token將會一起提交
    • 服務器在處理請求時先要檢查請求參數中的token和session中的token是否一致
      • 如果一致,則處理請求
      • 否則,返回錯誤頁面
    • 注意,token使用過一次以后必須要從session域中移除
  • Struts2 解決表單重復提交
  • 標記管理
    • 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 攔截器采取的做法只是阻斷后續的提交, 用戶將看到同樣的響應,但實際上并沒有重復提交
  • Struts2 解決表單的重復提交問題:
    • 在 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.
  • <s:form action="testForm" ><!-- 增加token 標簽,隱藏屬性 --><s:token></s:token><s:textfield name="username" label="用戶名"></s:textfield><s:submit value="提交"></s:submit> </s:form> <!-- token 攔截器 --> <action name="testForm" class="org.pan.action.TestFormAction" method="testForm"><!-- 使用token 攔截器,進行表單重復提交校驗 --><interceptor-ref name="token"></interceptor-ref><!-- 不要忘記默認的攔截器棧--><interceptor-ref name="defaultStack"></interceptor-ref><!-- 如果是使用的是 token 攔截器,校驗失敗后會轉到 invalid.token --><result name="invalid.token">/WEB-INF/views/token-error.jsp</result><result name="success">/WEB-INF/views/success.jsp</result> </action> <action name="testForm" class="org.pan.action.TestFormAction" method="testForm"><!-- 使用tokenSession 攔截器,進行表單重復提交校驗 --><interceptor-ref name="tokenSession"></interceptor-ref><!-- 不要忘記默認的攔截器棧--><interceptor-ref name="defaultStack"></interceptor-ref><!-- 如果是使用的是 tokenSession 攔截器,校驗后會回到返回的 action方法 result。就像什么都沒發生過 --><result name="success">/WEB-INF/views/success.jsp</result> </action>

    轉載于:https://www.cnblogs.com/MPPC/p/6134207.html

    總結

    以上是生活随笔為你收集整理的12、Struts2表单重复提交的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。