表单重复提交:
1.第一种:添加以后刷新页面(刷新的是Servlet)
2.第二种:重复点击提交按钮.
* 使用令牌机制:(防止表单重复提交)
* 在表单页面中 生成一个令牌
* 将这个令牌保存在session中一份,保存在表单隐藏字段中一份.
* 当表单提交的时候,获得到session中令牌和隐藏字段中令牌.
* 将sesion中的令牌移除了.
防表单重复提交的原理:
原理:令牌机制.
* 在JSP页面中,生成了一个随机的字符串,将字符串保存到session中一份,放到表单的隐藏字段中一份,提交,提交到后台之后,获得到两份随机字符串,将session中的清空.(保证这个令牌只能使用一次,提交一次).刷新页面,session中令牌已经失效了.
Struts2防表单重复提交.
* 使用表单标签:<s:token/>
* 在后台配置一个拦截器.token的拦截器.(这个拦截器没有在默认的栈中.)
* 步骤:
* 1.JSP页面表单中使用:<s:token/>
* 2.在struts的配置文件中加入引入token拦截器的代码:
<interceptor-ref name="defaultStack"/>
<interceptor-ref name="token"/>
* 3.需要在<result>配置一个name=”invalid.token”的跳转页面.(表单重复提交跳转的页面)
其他方式1:
禁掉提交按钮。表单提交后使用Javascript使提交按钮disable。这种方法防止心急的用户多次点击按钮。但有个问题,如果客户端把Javascript给禁止掉,这种方法就无效了。
其他方式2:
Post/Redirect/Get模式。在提交后执行页面重定向,这就是所谓的Post-Redirect-Get (PRG)模式。简言之,当用户提交了表单后,你去执行一个客户端的重定向,转到提交成功信息页面。
这能避免用户按F5导致的重复提交,而其也不会出现浏览器表单重复提交的警告,也能消除按浏览器前进和后退按导致的同样问题。
其他方式3:
在数据库里添加约束。在数据库里添加唯一约束或创建唯一索引,防止出现重复数据。这是最有效的防止重复提交数据的方法。