struts2 如何防止重复提交

来源:百度知道 编辑:UC知道 时间:2024/05/31 02:55:46
我用的是java中的struts2.0+spring+hibernate;前台jsp页面每次刷新,都有重复提交;我提交按钮用的是submit

我是copy过来的= =

1、 通过重定向的方式:把地址栏的地址显示为最后的地址。
2、 禁止客户端刷新:通过JS来控制,禁用刷新的功能、清除访问历史纪录;
3、 Struts自带的方式(令牌):服务器端发放一次性使用的令牌方式,服务器端给客户端每次请求发一个令牌,在客户端提交之后,检查令牌,如果这个令牌是第一次使用,就ok;否则,提示重复提交。
Action中有个几个相关方法:
SaveToken(request):生成一个新的令牌,并保存到客户端的请求对象中。
IsTokenValid(request,true):检查客户端的令牌是否是第一次使用,并且使该令牌失效。
ResetToken(request):重置客户端的令牌。

你好,我的公司使用两种技术防止表单重复提交;

1 图形验证码(很有效,推荐)
2 token令牌

实现的方式很简单,网上有太多的介绍了,只要知道要使用什么就可以了,希望对你有帮助

这是转了别人的东西,我觉得挺实用的,就转过来给你了,如果你仔细理解意思,就能解决问题了,其实是个很简单的东西。

Struts的Token(令牌)机制能够很好的解决表单重复提交的问题,基本原理是:服务器端在处理到达的请求之前,会将请求中包含的令牌值与保存在当前用户会话中的令牌值进行比较,看是否匹配。在处理完该请求后,且在答复发送给客户端之前,将会产生一个新的令牌,该令牌除传给客户端以外,也会将用户会话中保存的旧的令牌进行替换。这样如果用户回退到刚才的提交页面并再次提交的话,客户端传过来的令牌就和服务器端的令牌不一致,从而有效地防止了重复提交的发生。

这时其实也就是两点,第一:你需要在请求中有这个令牌值,请求中的令牌值如何保存,其实就和我们平时在页面中保存一些信息是一样的,通过隐藏字段来保存,保存的形式如: 〈input type="hidden" name="org.apache.struts.taglib.html.TOKEN" value="6aa35341f25184fd996c4c91