没有完整的进行一次请求页面->提交页面的过程而完成数据提交
一.造成重复提交的原因:
1.由于服务器缓慢或网络延迟的原因,重复点击提交按钮
2.已经提交成功,刷新成功页面(forward)
3.已经提交成功,通过回退,再次点击提交按钮
注意:
回退后,刷新表单页面,再次提交这时不是重复提交,而是发送新的请求
在Firefox下,重复提交到同一地址无效
能用URL重定向就使用URL重定向
二.表单重复提交的问题的实质:
没有先请求页面,就直接在提交数据
解决方案:令牌机制
三.基本操作:
在后台先生成一串随机数,然后将随机数放到Session,同时在JSP页面中使用EL表达式将Session中的数据放在表单的隐藏域中。提交表单后,如果jsp页面input标签中隐藏域的提交的valueye和后台session中拿到
的session中RandomCode一致,就表示不是重复提交,并且清空session.如果不一致就是重复提交。
JSP页面:input< type='hidden',name='randomCode' value ='RandomCode_in_Session'>
Serverlet1或者JSP页面:
<% String randomCode = UUID.Random.toString session.setAttribute("RandomCode_in_Session") %>
Servlet2: 获取input标签传递后台的值和从session中的值比较,相同清空,不是重复提交 session.remove("RandomCode_in_Session"),不相同就是重复提交,return;