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。

      

      

  • 相关阅读:
    数据库存储的数据为 unicode格式,在.NET 读取出来并转换为繁体字?
    ASP.net 打包并附加数据库
    xml特殊符號
    母板頁面 弹出提示错误的解决方案
    SQL一句實現上一條 下一條信息
    Serializing Faults using XmlSerializer
    VS2005 編譯WebService 為 CS文件
    Java开发的一些文件结构及位置
    kalilinux 其他配置
    完美解决mysql保存中文出现1366错误
  • 原文地址:https://www.cnblogs.com/AshOfTime/p/10692322.html
Copyright © 2011-2022 走看看