zoukankan      html  css  js  c++  java
  • 表单重复提交与解决

    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。

      

      

  • 相关阅读:
    Django上传文件
    Django的模板语言
    LeetCode:268. 缺失数字
    LeetCode:260. 只出现一次的数字 III
    SVN安装使用【转】
    c# 如何给 dataGridView里添加一个自增长列(列名为序号)
    asp.net mvc 使用Ajax调用Action 返回数据【转】
    sql server block如何查询并kill
    软件概要设计文档【转】
    软件详细设计文档【转】
  • 原文地址:https://www.cnblogs.com/AshOfTime/p/10692322.html
Copyright © 2011-2022 走看看