struts避免重複提交

struts   token一般需要進行2個action才能做到防止刷新.  
  做了幾次.覺得很麻煩.我的項目裏不想用struts.只是想把struts   token用在非struts項目裏.  
  通過研究.找到一個新的方法.可以應用到所有的項目中.  
  首先struts   token原理是:  
  1.生成令牌  
  2.在表單隱含框裏顯示令牌值  
  3.提交表單,對隱含框令牌值與系統存的令牌值進行比較.如果正確說明沒重複提交.錯誤說明有重複提交  
  4.清除令牌值  
  上面是原理.令牌值是以session值保存.所以只需要做2件事就可以實現struts   token功能  
  建2個頁面。1個頁面test1.jsp(用於提交表單用),另一個頁面test2.jsp(接收表單值)  
  1.test1.jsp如下  
  <%  
  org.apache.struts.util.TokenProcessor.getInstance().saveToken(request);  
  %>  
  <form   action="test2.jsp"   method="post">  
  <input   type="hidden"   name="org.apache.struts.taglib.html.TOKEN"   value="<%=session.getAttribute("org.apache.struts.action.TOKEN")%>"   />  
      <label>username  
      <input   type="text"   name="username"   />  
      </label>  
      <p>  
          <label>password  
          <input   type="text"   name="password"   />  
          </label>  
      </p>  
      <p>  
          <label>  
          <input   type="submit"   name="Submit"   value="Submit"   />  
          </label>  
     </p>  
  </form>  
   
  2.test2.jsp如下  
  <%  
  Thread.sleep(3000);  
  String   username="";  
  String   password="";  
   
  if(org.apache.struts.util.TokenProcessor.getInstance().isTokenValid(request,true))  
  {  
  username=request.getParameter("username");  
   
  password=request.getParameter("password");  
  int   val=com.test.test.getVal();  
  System.out.println(val+"*********username:"+username);  
  System.out.println(val+"*********password:"+password);  
  org.apache.struts.util.TokenProcessor.getInstance().resetToken(request);  
  }  
  else  
  {  
  org.apache.struts.util.TokenProcessor.getInstance().saveToken(request);  
  System.out.println("error");  
  }   
  %>  
  username:<%=username%>   <br/>  
  password:<%=password%>   <br/>  
   
  說明:  
  saveToken方法就是生成一個令牌值,放在session裏.session名爲:org.apache.struts.action.TOKEN  
  isTokenValid(request,true):判斷提交令牌值是否和session值一樣.true表示調用該方法後重新生成一個令牌值,保證只接受一次提交  
   
發佈了12 篇原創文章 · 獲贊 2 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章