如何解决表单重复提交问题

  • 时间:
  • 6375人关注

下面小编就为大家带来一篇详谈表单重复提交的三种情况及解决方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧,另外这篇文章主要知识点是关于表单重复提交、js、javascript的内容,如果大家想对相关知识点有系统深入的学习,可以参阅以下电子资料:

教程详情电子资料
  • 教程类别:javascript
  • 编辑整理:弓嘉歆
  • 教程字数:2145字节
  • 阅读时间:大概14分钟
  • 下载本教程(DOC版)
  • 《Vue.js前端开发基础与项目实战》项目源码
  • JSON-handle
  • Quick Javascript Switcher
  • Vue.js devtools
  • JSON Formatter
  • 第一种情况:提交完表单以后,不做其他操作,直接刷新页面,表单会提交多次。

    - 在servlet中写一句输出,用来判断是否提交多次

    System.out.println("已经插入");
    request.getRequestDispatcher("/login_success.jsp").forward(request, response);

    - 这样的话,刷新多少次,就会在控制器显示多少个“已经插入”。

    详谈表单重复提交的三种情况及解决方法

    - 根本原因:Servlet处理完请求以后,直接转发到目标页面,这样整个业务只发送了一次请求,那么当你在浏览器中点击刷新会一直都会刷新之前的请求。

    - 解决方法:不用转发到另一页面,采用重定向的方式跳转到目标页面

    response.sendRedirect("/day0815-session/login_success.jsp");

    详谈表单重复提交的三种情况及解决方法

    第二种情况:在提交表单时,如果网速较差,可能会导致点击提交按钮多次,这种情况也会导致表单重复提交。

    - 解决方法:点击提交按钮之后,使按钮不可用。通过js完成

    <script type="text/javascript">
     window.onload = function(){ 
      //获取按钮的对象
      var btn = document.getElementById("btn");
      //为按钮绑定单击响应函数
      btn.onclick = function(){  
       //点击以后使按钮不可用
       this.disabled=true; 
       //当将提交按钮设置为不可用时,会自动取消它的默认行为
       //手动提交表单
       this.parentNode.submit(); 
      };
     };
    </script><br><br><form action="${pageContext.request.contextPath }/SessionServlet" ><br>user:<input type="text" name="username"><br>password<input type="password" name="pwd"><br><input type="submit" value="提交" id="btn"> <br></form>
    

    - 注意“提交”按钮,此时已经不可按!

    详谈表单重复提交的三种情况及解决方法

    第三种情况:表单提交成功以后,直接点击浏览器上回退按钮,不刷新页面,然后点击提交按钮再次提交表单。

    - 根本原因:因为服务器在处理请求时,不会检查是否为重复提交的请求。

    - 解决方案:

    使用一个token的机制

    - token就是令牌的意思

    - 服务器在处理请求之前先来检查浏览器的token

    - token由服务器来创建,并交给浏览器,浏览器在向服务器发送请求时需要带着这个token

    - 服务器处理请求前检查token是否正确,如果正确,则正常处理,否则返回一个错误页面

    - 服务器所创建的token只能使用一次

    - token一般使用一个唯一的标识

    - 在jsp页面,获取uuid作为token

    - UUID:32位字符串,通常作为对象或者表的唯一标识,根据机器码和时间戳(从1970年1月1日开始到现在)生成。

    <%
     String uuid = UUID.randomUUID().toString();
     session.setAttribute("uuid", uuid);
    %><br>${errormsg }<br><form action="${pageContext.request.contextPath }/SessionServlet" ><br>  <input type="text" name="uuid" value="<%=uuid %>"/><br>  user:<input type="text" name="username"><br>  password<input type="password" name="pwd"><br>  <input type="submit" value="提交" "><br></form>

    - 在servlet页面

    String reqUUID = request.getParameter("uuid");
    HttpSession session = request.getSession();
    String sessUUID = (String) session.getAttribute("uuid");
    session.removeAttribute("uuid");
      
    if(reqUUID.equals(sessUUID)){
     response.sendRedirect(request.getContextPath()+"/login_success.jsp");
     System.out.println("已经插入");
    }else{
     request.setAttribute("errormsg", "重复登陆");
     request.getRequestDispatcher("/3.jsp").forward(request, response);
    }

    - 表单重复提交的危害:

    - 向数据库中插入大量的重复且没有意义的数据,占用服务器的资源

    - 处理请求服务器并没有检查请求是否为重复的请求,导致恶意的攻击

    以上这篇详谈表单重复提交的三种情况及解决方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持码农之家。


    上一篇:JS正则表达式验证中文字符的方法详解

    下一篇:webpack打包过程中因为图片的路径导致的问题

    相关内容

    • java与jsp的区别

      java是一种语言类似于C语言等的编程语言,而JSP(JavaServer Pages)是一种动态网页技术标准。 JSP和JAVA的区别,JSP算是JAVA一种技术吧,用在网页编程上,因为JAVA不能直接写在html上,但jsp能,jsp就是Servlet程序,当JSP收到客户的请求时,SCRIPTLET(脚本小程序)就会被执行,脚本段将被插入到JSP所生成的目标Servlet的Serivce函数中.所以脚本小程序不能写方法(函数),因为方法里面不能再有方法了.JSP的执行过程。 1、首先,JAVA是一门

      12-17JSP和JAVA的区别

      阅读更多
    • js可以替代java吗

      nodejs不会替代java。在虚拟机层面 node.js 基于的v8 VM看起来很不错,但和Java的 VM 一比,差距甚远。在服务器领域,特别是拥有众多 CPU 和大量内存的环境下,Java 的 VM 几乎是你能在地球上找到的最好的 VM。而v8既不能充分利用多CPU的性能,也不能将内存充分利用。Node.js是从前端转过来的,恰恰前端是计算机领域少数几个不需要计算机体系知识就能胜任的职业。想要真正做到像java那样水平,计算机体系性的知识必不可少。Node.js特别适合中小型系统的快速开

      12-13js能替代java吗

      阅读更多
    • JAVA直接访问jsp页面报404吗

      404表示的是路径未找到错误,解决办法如下: 【解决方法】 1、首先看错误信息 第一行 2、这里有出错的路径,也就是哪个找不到的路径 3、然后回程序中找调用这个路径的地方,确定路径写的是否正确,是否可达。 JSP页面运行时报的404错处理方法如下: 保证在你的Console窗口中看不到任何起到影响的Exception(jsp在编译的时候会先检查web.xml文件,如果全部正常,没有任何Exception的话,才会成功部署到.metadata\.plugins\org.eclipse.wst.server.

      12-12JAVA访问jsp页面报404吗

      阅读更多
    • jsp实质是java程序对吗

      JSP页面在本质上就是Servlet程序,当JSP页面在首次被访问时,Web容器就会将JSP页面转化为Servlet,只需要做一次。如index.jsp在首次被访问时,Web容器会将其翻译成一个index_jsp.java文件,即Servlet代码。 JSP是服务器端的一种基于java语言的网页技术,它是由一些JSP标记,java程序段以及HTML文件组成的结合体,以java语言作为其内置的脚本语言。实质上是通过调用JSP引擎来生成java文件,再将这个java文件编译成类文件,并执行这个类文件以生成动态

      12-05jsp实质是java程序吗

      阅读更多
    • jsp文件就是java文件吗

      jsp文件不是java文件,java是一种语言类似于C语言等的编程语言,而JSP(JavaServer Pages)是一种动态网页技术标准。jsp是一个网页页面,相当于复杂的html。其中可以插入script代码,当然也可以插入java代码。j ava是一个类文件,在java学习初期主要是写java文件的。如果不写页面的话是没有页面效果的。 1、JSP的写的代码,不利于代码重用。JAVA本来就是面向对象的语言,但在JSP中,体现不出来代码重用的优势。如果把一些通用的代码写成JAVA文件,就方便了很多,例

      12-02jsp文件是java文件吗

      阅读更多
    • JavaScript数据可视化编程

      JavaScript数据可视化编程

      大小:61.8 MBjs编程

      点击下载
    • HTML CSS JavaScript网页制作从入门到精通

      HTML CSS JavaScript网页制作从入门到精通

      HTML CSS JavaScript网页制作从入门到精通 第3版 共分为19章和4个附录,重点介绍使用HTML进行网页制作的方方面面,同时讲解了目前流行的Web标准与CSS网页布局实例,以及基于JavaScript语言的网页特

      大小:65.2 MB网页制作

      点击下载
    • JavaScript忍者秘籍

      JavaScript忍者秘籍

      JavaScript语言非常重要,相关的技术图书也很多,但没有任何一本书对JavaScript语言的重要部分(函数、闭包和原型)进行深入、全面的介绍,也没有任何一本书讲述跨浏览器代码的编写。本书是

      大小:83.5 MBJavaScript

      点击下载
    • JavaScript高级程序设计

      JavaScript高级程序设计

      《 JavaScript高級编程设计(第3版) 》是JavaScript超級畅销书的*版。ECMAScript5和HTML5在规范之战中同时获胜,使很多特有保持和手机客户端拓展宣布进到标准,另外也为JavaScript增加了许多融入发展方

      大小:23 MBJS程序设计

      点击下载
    • 精通JavaScript

      精通JavaScript

      精通JavaScript(第2版) 是iQuery之父的经典之作,是深入学习JavaScript技术的绝佳教材,涵盖了可重用代码、文档对象模型、Ajax、Web生产工具、AngularJS等内容。作者讲解了JavaScript的发展现状、实用技

      大小:33.5 MBJavaScript

      点击下载
    • 21天学通HTML+CSS+JavaScript Web开发

      21天学通HTML+CSS+JavaScript Web开发

      21天学通HTML CSS JavaScript Web开发(第7版) 是全球畅销书《21天学通使用HTML与CSS发布Web站点》的全新升级版本,作者在本书囊括了新的HTML5与CSS3技术,并采用易于理解的步骤式教程讲解了这些技

      大小:104.9 MB前端

      点击下载
    • JavaScript基础教程

      JavaScript基础教程

      本书是经典的JavaScript入门书,以易学便查、图文并茂、循序渐进和善于用常见任务讲解语言知识而著称。书中从JavaScript语言基础开始,分别讨论了图像、框架、浏览器窗口、表单、正则表达式

      大小:14 MBJS教程

      点击下载

    学习笔记