关于刷新时表单重复提交问题

解决方法和原因--->

解决方法:

        一、在页面生成一个随机数,放在session域中;

        二、并在form表单中设置一个隐藏标签,值为之前生成的随机数,和表单数据一起提交给后台;

        三、后台对表单中的随机数进行判断:

                1、表单随机数为空

                2、session中随机数为空(1、2可能是未走页面入口)

                3、表单随机数与session中的随机数不相等(表单随机数共享request中的数据,所以一直都是一样的,而session中的随机数是每次进页面重新产生的。这导致两个随机数不相等)

        四、以上三种情况都说明表单是重复提交的,后台可以不进行表单处理操作直接返回。

        五、除此三种情况,对表单进行正常处理,正常业务进行完要记得将session中的随机数移除

原因:

Q:添加完数据后重新进入了页面,按理来说表单数据被清空了,为什么再次刷新还是能提交先前表单的数据,如

<input type="hidden" name="forward" value="/jsp/room/roomList.jsp">

A:这是转发与重定向的区别:

      forward共享同一个request(准确来说,在jboss与tomcat中,两个request是不一样的。第一次的请求对象是org.apache.catalina.connector.RequestFacade@xxxxxxxx;转发后,服务器对第一次的请求对象进行了转换,请求对象变成了org.apache.catalina.core.ApplicationHttpRequest@xxxxxxxx。但是他们两者都实现了ServletRequest接口,可以互相转换)。

        当再次刷新页面时,后台接收的request中数据和上次一样,所以看起来又进行了一次表单提交,这就是为什么刷新页面会重新提交表单。所以,将转发换成重定向也能解决刷新重复提交表单的问题。




参考与转载自:https://www.cnblogs.com/bulrush/p/5668721.html

                        https://blog.csdn.net/qx5211258/article/details/45220135

                        https://bbs.csdn.net/topics/390899266(关于转发,两次请求是否是同一个request对象)

猜你喜欢

转载自blog.csdn.net/hellohicsdn/article/details/80483574
今日推荐