页面多次提交

一点拙见,仅供参考:
1.提示并跳转到指定页面,防止重复提交页面,(跳转到其他页面时会防止后退键的使用)代码:out.print("<script>alert('Success(确认提交)!');window.location.href='show.aspx';</script>");

2.直接从新转到本页代码: response.sendRedirect(Request.Url.ToString());

3.按钮提交后将其变为灰色

4.插入之前可以在数据库中先判断是否有相同的记录,主键除外。

方法很多如果用struts的话有一个token 。或者在页面放一个隐藏的表单再或者用div当点击提交的时候直接锁屏

使用Struts的Token机制解决表单的重复提交

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

这时其实也就是两点,第一:你需要在请求中有这个令牌值,请求中的令牌值如何保存,其实就和我们平时在页面中保存一些信息是一样的,通过隐藏字段来保存,保存的形式如: 〈input type="hidden" name="org.apache.struts.taglib.html.TOKEN" value="6aa35341f25184fd996c4c918255c3ae"〉,这个value是TokenProcessor类中的generateToken()获得的,是根据当前用户的session id和当前时间的long值来计算的。第二:在客户端提交后,我们要根据判断在请求中包含的值是否和服务器的令牌一致,因为服务器每次提交都会生成新的Token,所以,如果是重复提交,客户端的Token值和服务器端的Token值就会不一致。下面就以在数据库中插入一条数据来说明如何防止重复提交。

你可能感兴趣的:(提交)