1.方法一
在servlet中模拟网络延迟造成表单重复提交
//解决表单重复提交方法 //接收数据 String username = req.getParameter("username"); System.out.println("接收的数据为:"+username); try { //模拟网络延迟 Thread.sleep(300); } catch (InterruptedException e) { e.printStackTrace(); } //返回数据 resp.getWriter().write("success"); }
编写jsp页面
<head> <title>解决表单重复提交</title> <script type="text/javascript"> //创建一个变量 false代表没有点击过 true代表已经点击过 var flag=false; function formSubmit() { if(!flag){ flag=true; return true; }else{ return false; } } </head> <body> <form action="FormServlet" onsubmit="return formSubmit()" method="post"> <input type="hidden" id="hiddenToken" name="formToken"/> <input type="text" name="username"/> <input type="submit" value="提交"/> </form> </body>
方法二:使用Token令牌完成防止表单重复提交
编写servlet1
//方法二:Token解决表单重复提交 //生成令牌 String token= UUID.randomUUID().toString(); //令牌保存到session中 req.getSession().setAttribute("sessionToken",token); //响应 resp.getWriter().write(token);
编写servlet2
//解决表单重复提交方法 //验证令牌 //获取页面提交的隐藏域数据 String formToken = req.getParameter("formToken"); //获取Session中的Token String sessionToken = (String)req.getSession().getAttribute("sessionToken"); //如果页面中获取的和session中不一致,代表已经提交过了,不要重复提交 if(!formToken.equals(sessionToken)){ resp.getWriter().write("不要重复提交~"); return; } //接收数据 String username = req.getParameter("username"); System.out.println("接收的数据为:"+username); //必须将token清空,不然永远是一致的 req.getSession().removeAttribute("sessionToken"); try { //模拟网络延迟 Thread.sleep(300); } catch (InterruptedException e) { e.printStackTrace(); } //返回数据 resp.getWriter().write("success"); }
编写jsp页面
<head> <title>解决表单重复提交</title> <script type="text/javascript"> //创建一个变量 false代表没有点击过 true代表已经点击过 var flag=false; function formSubmit() { if(!flag){ flag=true; return true; }else{ return false; } } //Token解决表单重复提交 $(function () { //生成令牌 $.ajax({ url:"TokenServlet", type:"post", success:function (token) { $("#hiddenToken").val(token); } }) }) </script> </head> <body> <form action="FormServlet" onsubmit="return formSubmit()" method="post"> <input type="hidden" id="hiddenToken" name="formToken"/> <input type="text" name="username"/> <input type="submit" value="提交"/> </form> </body>