<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    thinking

    one platform thousands thinking

    Token(令牌)的機制來解決重復提交

    struts有自帶的Token(令牌)的機制來解決重復提交(包括后退,刷新等).舉例:

    假設:假設有一個新增用戶的填寫表單頁面,填寫完后點擊"提交"按鈕完成數據庫錄入功能,要求不能重復提交(指類似刷新頁面的情況).此時,需要有兩個action(第一個action用來生成hidden的token值.第二個action用來校驗token值,通過判斷來決定是不是重復提交,不是則提交操作,否則提示錯誤)和至少一個頁面(保存token值和填寫用戶信息的錄入頁面)來完成校驗是否重復提交.此處有兩個頁面來完成.

    為了方便,用戶表只有兩個字段用戶名<username>和密碼<password>:

    具體邏輯如下:

    index.jsp--鏈接--> PrepareAddUserAction.java--轉發并生成token--> addUser.jsp--提交-->
    AddUserAction.java--首先校驗 '是否重復提交 ',是提示錯誤信息,不是,執行數據庫操作.

    部分相關代碼(省略formbean的代碼):
    ========index.jsp========
    <html> <head> <title> 測試 </title> </head> <body>
        <a   href= " <%=request.getContextPath()%> /PrepareAddUserAction.java "> 新增用戶 </a>
    </body> </html>

    =========PrepareAddUserAction.java=========
    package   com.tseyimwah.struts.action;

    import   javax.servlet.http.HttpServletRequest;
    import   javax.servlet.http.HttpServletResponse;

    import   org.apache.struts.action.Action;
    import   org.apache.struts.action.ActionForm;
    import   org.apache.struts.action.ActionForward;
    import   org.apache.struts.action.ActionMapping;

    public   class   PrepareAddUserAction   extends   Action   {
    public   ActionForward   execute(
    ActionMapping   mapping,
    ActionForm   form,
    HttpServletRequest   request,
    HttpServletResponse   response)   throws   HibernateException   {
                                        .........//相關方法
                                        saveToken(request);     //在下一個頁面addUser.jsp生成hidden類型的token值
    return   mapping.findForward( "addUser ");//頁面跳轉
    }
    }

    ==========addUser.jsp=============
    此處代碼沒有什么要求,含有form的普通struts頁面,代碼省略,里面的 "提交 "按紐給AddUserAction.java,即 <html:form     action= "/AddUserAction.do "   method= "post ">

    ============AddUserAction.java=====
    package   com.tseyimwah.struts.action;

    import   javax.servlet.http.HttpServletRequest;
    import   javax.servlet.http.HttpServletResponse;

    import   org.apache.struts.action.Action;
    import   org.apache.struts.action.ActionForm;
    import   org.apache.struts.action.ActionForward;
    import   org.apache.struts.action.ActionMapping;

    public   class   AddUserAction   extends   Action   {
    public   ActionForward   execute(
    ActionMapping   mapping,
    ActionForm   form,
    HttpServletRequest   request,
    HttpServletResponse   response)   throws   HibernateException   {
             
          //判斷token值,如果是重復提交跳轉到錯誤頁面則提示出錯信息,否則執行相關的數據庫操作
          if   (!isTokenValid(request)){
                request.setAttribute(GlobalKeys.MESSAGE_ID,   "不允許重復提交! ");//設置出錯信息
                return   (mapping.findForward( "errorPage "));
          }   else
              resetToken(request);   //重新設置token值,可不用
          }
          ......
          ......//其他的相關方法,如設置相關屬性值,調用相關的數據庫操作等
          return   (mapping.findForward( "addUserSucess "));//新增用戶成功的頁面
    }


    這只是將相關的必要代碼寫出,根據需要可以改寫相關的代碼.

    posted on 2009-02-18 15:39 lau 閱讀(1228) 評論(0)  編輯  收藏 所屬分類: J2EE

    主站蜘蛛池模板: 亚洲系列中文字幕| 国产成人亚洲综合无码| 久久精品国产亚洲AV无码麻豆| 人妻巨大乳hd免费看| 亚洲精品无码久久久久AV麻豆| 国产精品亚洲色图| 国产免费观看黄AV片| 免费观看又污又黄在线观看| 亚洲国产精品自在拍在线播放| 日本高清免费中文在线看| 亚洲精品国产精品乱码不卡| 一区二区三区免费视频播放器| 中文字幕亚洲无线码| 久久久久久国产精品免费免费男同| 97se亚洲综合在线| 免费福利在线播放| 亚洲精品人成网线在线播放va| 白白国产永久免费视频| 色吊丝性永久免费看码| 亚洲国产日韩在线视频| 亚洲一区二区三区免费观看| 国产亚洲福利在线视频| 免费成人午夜视频| a毛片免费全部播放完整成| 亚洲精品私拍国产福利在线| 97在线观看永久免费视频| 337P日本欧洲亚洲大胆精品| 亚洲人成网7777777国产| 久久久久av无码免费网| 亚洲AV第一成肉网| 午夜亚洲国产理论秋霞| 免费a级毛片高清视频不卡| 全部在线播放免费毛片| 337p欧洲亚洲大胆艺术| 日韩一级在线播放免费观看| 黄色网页在线免费观看| 亚洲一卡2卡3卡4卡国产网站| 免费v片在线观看品善网| 久久久久国产精品免费看| 国产午夜亚洲精品不卡| 亚洲小视频在线观看|