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表示调用该方法后重新生成一个令牌值,保证只接受一次提交  
   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值