<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

    主站蜘蛛池模板: 野花香高清在线观看视频播放免费| 精品国产污污免费网站| 免费人成在线观看视频播放| 国产精品亚洲二区在线| 人妻仑乱A级毛片免费看| 亚洲欧洲日产国码高潮αv| 一个人免费视频在线观看www| 国产美女被遭强高潮免费网站 | a级毛片毛片免费观看久潮喷| 日本亚洲成高清一区二区三区| 性xxxxx大片免费视频| 亚洲国产中文在线视频| 任你躁在线精品免费| 久久久久久亚洲AV无码专区| 成年女人毛片免费播放视频m| 羞羞视频免费网站含羞草| 亚洲精品乱码久久久久久| 一级黄色免费毛片| 国产亚洲真人做受在线观看| 日本视频一区在线观看免费| 亚洲av中文无码乱人伦在线观看| 亚洲午夜AV无码专区在线播放| 精品视频在线免费观看| 亚洲熟妇av午夜无码不卡| 国产免费一区二区三区| 国产午夜亚洲精品不卡| 无码乱人伦一区二区亚洲| 最近最新中文字幕完整版免费高清| 一级成人a免费视频| 亚洲伊人久久精品| 亚洲精品无码久久毛片| 国产四虎免费精品视频| sss日本免费完整版在线观看| 亚洲精品中文字幕无乱码| 亚洲精品成人片在线观看| 免费可以看黄的视频s色| 中文字字幕在线高清免费电影| 亚洲人成电影网站久久| 国产精品色午夜免费视频| 国产精品免费大片| 麻豆一区二区三区蜜桃免费|