BlogJava 聯系 聚合 管理  

          Blog Stats

          隨筆檔案


          bitmap

          bitmap

          問題的產生原因
                 頁面提交給Action去進行業務處理,Action再跳轉回前臺頁面,但這時URL依然是“頁面提交給Action的鏈接”,這時前臺刷新一下頁面,就變成再次執行了一次提交操作。

           

          解決思路
               1,在Action頁面中跳轉的時候用重定向,可以在struts-config.xml中配置<forward ... redirect=“true”>
          不過這種方法會使得request中放置數據丟失;
               2,用Token令牌環來實現
                    提交到Action的時候,進行一系列操作,然后保存一個標志,這時再跳轉到前臺頁面。如果前臺頁面刷新的話,Action通過查看是否有標志,就能判斷用戶是刷新還是提交。

           

          Action中操作令牌的方法
                一: saveToken(HttpServletRequest request)
                      創建一個新令牌,并將其保存在當前用戶的會話中,如果用戶的會話不存在,將首先創建新會話對象
                二: isTokenValid(HttpServletRequest request)
                      判斷存儲在當前會話中的令牌值和請求參數中的令牌值是否匹配,如果匹配,返回true,否則返回false 。
                      以下情況返回false:
                            1,用戶的HttpSession不存在
                            2,用戶Session中沒有保存令牌值
                            3,在用戶請求參數中沒有令牌值
                            4,存儲在用戶Session范圍內的令牌值和請求參數中 的令牌值不匹配
                 三:resetToken()
                       刪除保存在Session范圍內的令牌值

           

          示例代碼

          1,進入目標頁,如 http://www.bt285.cn ,通過IndexAction轉發,其中需要保存令牌:

          public ActionForward execute(ActionMapping mapping, ActionForm form,   
                  HttpServletRequest request, HttpServletResponse response)   
                  
          throws Exception {   
              saveToken(request);   
              
          return mapping.findForward("index");// http://www.5a520.cn   
          }
            
           2,目標頁面(test.jsp)需要使用Struts標簽庫:
          <body>  
              
          <html:form action=" http://www.5a520.cn test.do" method="post">  
                  
          <input type="submit" value="提交" />  
              
          </html:form>  
          </body>  
          當提交test.jsp時提交到TestAction處理:
          <struts-config>  
              
          <form-beans>  
                  
          <form-bean name="testForm" type="com.tanlan.struts.form.TestForm">  
                  
          </form-bean>  
              
          </form-beans>  
              
          <action-mappings>  
                  
          <action path="/index" type="com.tanlan.struts.action.IndexAction">  
                      
          <forward name="index" path="/index.jsp"></forward>  
                  
          </action>  
                  
          <action path="/test" type="com.tanlan.struts.action.TestAction"  
                      name
          ="testForm" input="/index.jsp">  
                      
          <forward name="test" path="/test.jsp"></forward>  
                      
          <forward name="error" path="/error.jsp"></forward>  
                  
          </action>  
              
          </action-mappings>  
          </struts-config>  

          至此,大功告成!

          完整示例請參考附件。

           

          posted on 2009-07-12 12:55 bitmap 閱讀(1712) 評論(0)  編輯  收藏
          主站蜘蛛池模板: 南郑县| 武陟县| 陈巴尔虎旗| 尚义县| 聊城市| 城固县| 陕西省| 崇阳县| 北安市| 大方县| 高雄市| 贵州省| 胶州市| 航空| 怀化市| 峨山| 高密市| 安西县| 磴口县| 岱山县| 怀化市| 石门县| 长宁县| 东城区| 浮山县| 承德市| 同心县| 宾川县| 荣成市| 太仓市| 宁蒗| 武功县| 九龙坡区| 乐业县| 信阳市| 响水县| 揭阳市| 垣曲县| 苍梧县| 多伦县| 江山市|