kxbin
          成功留給有準備的人
          posts - 10,  comments - 35,  trackbacks - 0
          1》防止多次點擊“提交”,讓多次“提交”變成只一次“提交”
          saveToken(rquest)
          的目的是頁面上的按鈕只相應一次,比如說,在頁面上有個新增按鈕,如果你連續(xù)點擊數(shù)次,后臺程序可能會響應n次,加了這句話,在頁面
          上自動生成一個hidden變量
          2》防止頁面重復提交
          利用同步令牌(Token)機制來解決Web應用中重復提交的問題,Struts也給出了一個參考實現(xiàn)。
            基本原理: 
            服務器端在處理到達的請求之前,會將請求中包含的令牌值與保存在當前用戶會話中的令牌值進行比較,看是否匹配。在處理完該請求后
          ,且在答復發(fā)送給客戶端之前,將會產(chǎn)生一個新的令牌,該令牌除傳給客戶端以外,也會將用戶會話中保存的舊的令牌進行替換。這樣如果用
          戶回退到剛才的提交頁面并再次提交的話,客戶端傳過來的令牌就和服務器端的令牌不一致,從而有效地防止了重復提交的發(fā)生。 
            if (isTokenValid(request, true)) {
            
            // 表單不是重復提交
            
            //這里是保存數(shù)據(jù)的代碼
            
            } else {
            
            //表單重復提交
            
            saveToken(request);
            
            //其它的處理代碼
            
            }
           
           
          網(wǎng)上例子為證:
              public ActionForward execute(ActionMapping mapping, ActionForm form,
                      HttpServletRequest request, HttpServletResponse response) {
                  UserForm userForm = (UserForm)form;
                  if(!isTokenValid(request)){         
                      saveToken(request);
                      userForm.setMessage("重復提交");
                      return mapping.findForward("failure");
                  }
                  else{
                      resetToken(request);
                  }
                  request.setAttribute("user", userForm);
                  return mapping.findForward("success");
              }
          }
          模板經(jīng)典例子:
          public ActionForward save(ActionMapping mapping, ActionForm form,
             HttpServletRequest request, HttpServletResponse response)
             throws BaseException {
            if (!isTokenValid(request)) { // 如果指令無效,則屬于重復提交
             return (new ActionForward(mapping.getInput()));
            } else {
             resetToken(request);
            }
            BaseDao dao = DAOFactory.getDao(getEntityDAOClassName());
            dao.begingTransaction();
            Class cls = dao.getEntityClass();
            try {
             BaseVO vo = (BaseVO) cls.newInstance();
             
             DataTrans.copyProperties(vo, form);
             this.saveEx(mapping, form, request, response, vo);
             dao.save(vo);
             dao.commitTransaction();
            } catch (Exception e) {
             dao.rollback();
             throw new BaseException("保存數(shù)據(jù)出現(xiàn)異常");
            } finally {
             dao.sessionClose();
            }
            return mapping.findForward("saveSuccess");
           }
          posted on 2011-12-02 09:32 kxbin 閱讀(766) 評論(0)  編輯  收藏 所屬分類: J2EE
          你恨一個人是因為你愛他;你喜歡一個人,是因為他身上有你沒有的;你討厭一個人是因為他身上有你有的東西;你經(jīng)常在別人面前批評某人,其實潛意識中是想接近他。

          <2025年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          常用鏈接

          留言簿(5)

          隨筆檔案

          文章分類

          文章檔案

          相冊

          收藏夾

          J2EE

          java技術網(wǎng)站

          Linux

          平時常去的網(wǎng)站

          數(shù)據(jù)庫

          電影網(wǎng)站

          網(wǎng)站設計

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 乃东县| 怀仁县| 洛阳市| 营山县| 锦屏县| 郧西县| 乌审旗| 大冶市| 西乌珠穆沁旗| 萝北县| 沂南县| 嘉鱼县| 剑河县| 大冶市| 景德镇市| 揭阳市| 郯城县| 荆门市| 东至县| 汝南县| 富裕县| 阿克陶县| 东乡族自治县| 旬邑县| 高唐县| 怀来县| 新竹县| 泸溪县| 宁城县| 普格县| 壶关县| 西林县| 定襄县| 浦江县| 镇雄县| 色达县| 华池县| 桃园市| 伊宁市| 容城县| 和政县|