防止表单数据重复提交

struts1.x防止表单数据重复提交的原理是:当首次进入表单页面时,在action中生成一个随机数,调用this.saveToken(request)方法,保存到session中,当action跳转到表单页面时在页面上设置一个hidden域,value为生成的随机数,随着表单一起提交。在表单提交的action中对token的值进行比较。调用isTokenValid(request)方法。该方法对session中保存的token值和页面hidden中传递的值进行比较。如果相等判断为不是重复提交,否者判断为重复提交。

注意:表单jsp页面的form必须是struts的<html:form></html:form>否者不会再页面自动生成hidden域,如果提交的话会一直判断为重复提交。


根据以上原理:可以自己实现防止页面重复提交。
(1)当用户登录时再session中设置一个attribute,该attribute的值尽量要保持唯一性。
(2)再需要提交表单数据的页面自己手写一个hidden域,value为第一步设置的值。
(3)提交表单,判断传递的hidden域与session中的attribute是否相等。相等则返回true,同时修改session中attribute的值。(该值得生成可以自己定义生成规则,但是要尽量确保唯一)。

你可能感兴趣的:(jsp,struts)