防止表单重复提交

摘要:
标志){Flag=true;returntrue;}否则{returnfalse;}}//令牌解决重复提交表单$˃

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"   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代表已经点击过
        varflag=false;

        functionformSubmit() {
            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>

免责声明:文章转载自《防止表单重复提交》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇keepalived配置日志有关在使用aireplay-ng处理5Ghz频段的wifi时出现“No such Bssid available”的解决方法下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

ANR的原理分析和简单总结

前言ANR(Application Not Responding),应用无响应,这个可能每个人都碰到过。 该篇主要简单总结下,ANR的几种常见类型(输入事件、广播接收器、Service、ContentProvider),以及ANR一般如何产生的及如何避免。 最后重点是通过源码 了解这几种类型 是如何产生ANR、超时时间是怎么来的、ANR后如何处理的等。 关...

vb中从域名得到IP及从IP得到域名

'vb中从域名得到IP及从IP得到域名 Private Const WS_VERSION_REQD = &H101 Private Const WS_VERSION_MAJOR = WS_VERSION_REQD &H100 And &HFF& Private Const WS_VERSION_MINOR =...

C#发送邮件(使用SSL,587端口)

static readonly string smtpServer = System.Configuration.ConfigurationManager.AppSettings["SmtpServer"]; static readonly string userName = System.Configuration.Configurati...

php防止表单重复提交

解决方案一:引入cookie机制来解决 提交页面代码如下a.php代码如下: <form name="form1" method="post" action="t2.php"> <p>说明 <input type="text" name="titile" /> </p> <p> <input...

ArcGIS API For Android离线地图的实现

今天搞了一个ArcGIS API For Android离线地图的实现。效果如下:Android的版本是2.1main.xml,这里要说明的,初始化范围一定要有,不然会不能显示的。 <?xml version="1.0" encoding="utf-8"?> <com.esri.android.map.MapView xmln...

【Python之路】特别篇--ECMA对象、DOM对象、BOM对象

ECMA对象从传统意义上来说,ECMAScript 并不真正具有类。事实上,除了说明不存在类,在 ECMA-262 中根本没有出现“类”这个词。 ECMAScript 定义了“对象定义”,逻辑上等价于其他程序设计语言中的类。 var o = new Object(); 对象的概念与分类: 由ECMAScript定义的本地对象.独立于宿主环境的 ECMAS...