農農  

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>

 

posted on 2020-02-06 16:58  Baekhyunne  阅读(145)  评论(0编辑  收藏  举报