表单重复提交与解决

1、什么是表单重复提交

1.1 刷新页面

  在jsp页面点击提交后,会有一个post请求发到testController中,该Controller直接返回success视图。

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>首页</title>
</head>
    <form action="/hello" method="post">
        <input type="submit">
    </form>
<body>

</body>
</html>
    @RequestMapping("hello")
    public String test() throws InterruptedException {
        System.out.println("重复提交");
        //Thread.sleep(10000);
        return "success";
    }

  此时虽然页面跳转到了success视图,但是浏览器URL里显示的还是hello,如果此时刷新浏览器那么会重复是向后台提交数据。

1.2 响应过慢

  上面这种情况还可以通过redirect解决,即登陆后的页面重定向到新的页面来避免。但如果是因为网速过慢导致的页面没有发生跳转,用户以为此时没有发出请求而重复点击提交按钮也会造成表单重复提交。

  还是上面的jsp,我在Controller里加入睡眠来模拟网速太慢造成的相应过慢。此时点击提交后会看到页面处在加载状态但是没有发生跳转,如果再次点击提交也会造成重复提交。

    @RequestMapping("hello")
    public String test() throws InterruptedException {
        System.out.println("重复提交");
        Thread.sleep(10000);
        return "success";
    }

 

2、后端如何解决表单重复提交

  表单重复提交在前端可以通过js来解决,但是如果浏览器禁用了js就无效了。

  通过token来实现这一功能需要分为两步,需要对两个Controller下手:1、对跳转到登陆页面的Controller,每次来都这个Controller的时候加入Token 2、对post请求的Controller,每次检验并删除Token。

  

  

转载于:https://www.cnblogs.com/AshOfTime/p/10692322.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值