网页开发中如何解决表单重复提交的三种情况

  介绍

这篇文章主要为大家展示了“网络开发中如何解决表单重复提交的三种情况”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“网络开发中如何解决表单重复提交的三种情况”这篇文章吧。

第一种情况:提交完表单以后,不做其他操作,直接刷新页面,表单会提交多次。

<强>——在servlet中写一句输出,用来判断是否提交多次

System.out.println(“已经插入“);   request.getRequestDispatcher (“/login_success.jsp") forward格式(请求,响应);

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

巴缈⒅腥绾谓饩霰淼ブ馗刺峤坏娜智榭?

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

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

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

巴缈⒅腥绾谓饩霰淼ブ馗刺峤坏娜智榭?

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

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

& lt; script 类型=拔谋?javascript"比;   ,window.onload =, function () {,//才能获取按钮的对象   var 才能;btn =, . getelementbyid (“btn");//为才能按钮绑定单击响应函数   btn.onclick 才能=,函数(){,,   ,,//点击以后使按钮不可用   ,,this.disabled=true,,   ,,//当将提交按钮设置为不可用时,会自动取消它的默认行为   ,,//手动提交表单   ,,this.parentNode.submit (),,   ,,};   ,};   & lt;/script> & lt; br> & lt; br> & lt; form  action=? {pageContext.request.contextPath }/SessionServlet",祝辞& lt; br>用户:& lt; input 类型=皌ext", name=皍sername"祝辞& lt; br> password & lt; input 类型=皊ubmit", value=https://www.yisu.com/zixun/碧峤? id=" btn ">

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

巴缈⒅腥绾谓饩霰淼ブ馗刺峤坏娜智榭?

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

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

<强> -解决方案:

使用一个令牌的机制

——令牌就是令牌的意思

——服务器在处理请求之前先来检查浏览器的令牌

——令牌由服务器来创建,并交给浏览器,浏览器在向服务器发送请求时需要带着这个标记

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

——服务器所创建的令牌只能使用一次

——令牌一般使用一个唯一的标识

<强>——在jsp页面,获取uuid作为标记

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

& lt; %   ,String  uuid =, UUID.randomUUID () .toString ();   ,session.setAttribute (“uuid", uuid);   %祝辞& lt; br> $ {errormsg } & lt; br> & lt; form  action=? {pageContext.request.contextPath }/SessionServlet",祝辞& lt; br>& lt; input 类型=皌ext", name=皍uid",价值=https://www.yisu.com/zixun/"/>
用户:
密码
String  reqUUID =, request.getParameter (“uuid");   HttpSession  session =, request.getSession ();   String  sessUUID =,(字符串),session.getAttribute (“uuid");   session.removeAttribute (“uuid");   ,,   如果(reqUUID.equals (sessUUID)) {   ,response.sendRedirect (request.getContextPath () +“/login_success.jsp");   ,System.out.println(“已经插入“);   其他}{   ,request.setAttribute (“errormsg",,“重复登陆“);   ,request.getRequestDispatcher (“/3. jsp") forward格式(请求,响应);   }

网页开发中如何解决表单重复提交的三种情况