表单重复提交
1.什么是表单重复提交
在不刷新表单页面的情况下:
》多次点击提交按钮
》已经提交成功,按"回退"之后,再点击"提交按钮"
》在控制器响应页面的形式为转发情况下,若已提交成功,然后几点刷新(或者F5)
注意:》若刷新表单页面,再提交表单不算是重复提交
》若使用的是redirect的响应类型,已经提交成功后,再点击刷新不算重复提交
表单重复提交的危害:
》加重服务器负担
》可能导致错误操作
struts2 解决表单重复提交问题
1.在s:form中添加s:token 子标签
》生成一个隐藏域
》在session 添加一个属性值
》隐藏域中的值和session中的属性值是一致的。
2.使用Token或TokenSession拦截器
》这两个拦截器均不在默认的拦截器栈中,所以需要手工配置
》若使用Token拦截器,则需要配置一个token.valid 的 result
》若使用TokenSession拦截器,则不需要配置任何其他的result
3.使用Token或TokenSession拦截器的区别
》都是解决表单重复提交问题
》使用Token拦截器会转到token.valid 这个 result
》使用TokenSession 拦截器则还会响应那个目标页面,但不会执行目标TokenSession的后续拦截器,好像什么都没发生一样!
4.注意使用s:actionerror标签来显示重复提交的错误消息,改错误消息可以在国际化资源文件中覆盖