您现在的位置是:首页 >

防止重复提交 JSP、Struts避免Form重复提交的几种方案

火烧 2021-07-11 02:47:54 1035
JSP、Strut 避免Form重复提交的几种方案    java cri t 设置一个变量 只允许提交一次    还是java cri t 将提交按钮或者image置为di a le  o u mi

JSP、Struts避免Form重复提交的几种方案  

   javascript 设置一个变量 只允许提交一次

   还是javascript 将提交按钮或者image置为disable

  onsubmit= getElById( submitInput ) disabled = true; return true; >

防止重复提交 JSP、Struts避免Form重复提交的几种方案

   利用struts的同步令牌机制

  利用同步令牌(Token)机制来解决Web应用中重复提交的问题 Struts也给出了一个参考实现

  基本原理

  服务器端在处理到达的请求之前 会将请求中包含的令牌值与保存在当前用户会话中的令牌值进行比较 看是否匹配 在处理完该请求后 且在答复发送给客户端之前 将会产生一个新的令牌 该令牌除传给客户端以外 也会将用户会话中保存的旧的令牌进行替换 这样如果用户回退到刚才的提交页面并再次提交的话 客户端传过来的令牌就和服务器端的令牌不一致 从而有效地防止了重复提交的发生    if (isTokenValid(request  true)) {   // your code here   return mapping findForward( success );   } else {   saveToken(request);   return mapping findForward( submitagain );   }   Struts根据用户会话ID和当前系统时间来生成一个唯一(对于每个会话)令牌的 具体实现可以参考TokenProcessor类中的generateToken()方法    //验证事务控制令牌 会自动根据session中标识生成一个隐含input代表令牌 防止两次提交

   在action中    //   // value= aa f fd c c c ae >   if (!isTokenValid(request))   errors add(ActionErrors GLOBAL_ERROR   new ActionError( error transaction token ));   resetToken(request); //删除session中的令牌     action有这样的一个方法生成令牌   protected String generateToken(HttpServletRequest request) {   HttpSession session = request getSession();   try {   byte id[] = session getId() getBytes();   byte now[] =   new Long(System currentTimeMillis()) toString() getBytes();   MessageDigest md = MessageDigest getInstance( MD );   md update(id);   md update(now);   return (toHex(md digest()));   } catch (IllegalStateException e) {   return (null);   } catch (NoSuchAlgorithmException e) {   return (null);   }   }  在更新的时候防止按钮重复点击 主要是用Session来做判断

  在JSP/Servlet中可以

lishixinzhi/Article/program/Java/ky/201311/28913  
永远跟党走
  • 如果你觉得本站很棒,可以通过扫码支付打赏哦!

    • 微信收款码
    • 支付宝收款码