2020年10月24日:
关于表单重复提交
造成表单重复提交的原因有以下几点:
第一种情况:提交完表单以后,不做其他操作,直接刷新页面,表单会提交多次。
根本原因:Servlet处理完请求以后,直接转发到目标页面,这样整个业务只发送了一次请求,那么当你在浏览器中点击刷新会一直都会刷新之前的请求。
解决方法:不用转发到另一页面,采用重定向的方式跳转到目标页面
response.sendRedirect(
"/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
>
<form action=
"${pageContext.request.contextPath }/SessionServlet"
>
user:<input
type
=
"text"
name=
"username"
>
password<input
type
=
"password"
name=
"pwd"
>
<input
type
=
"submit"
value=
"提交"
id
=
"btn"
>
<
/form
>
第三种情况:表单提交成功以后,直接点击浏览器上回退按钮,不刷新页面,然后点击提交按钮再次提交表单。
- 根本原因:因为服务器在处理请求时,不会检查是否为重复提交的请求。