struts2表单重复提交问题

来源:互联网 发布:本地文件同步软件 编辑:程序博客网 时间:2024/06/05 05:39

struts2重复提交

    我们先来说一下什么是重复提交:所谓重复提交,就是用户在页面多次点击提交按钮,或者通过不断刷新页面,把已经提交过的数据多次向后台提交。

    重复提交对于查询类的功能,问题还不是太大,但是对于新增或是修改类的功能,就有可能凭空的出现很多同样信息的重复数据,从而导致业务功能出现错误。


 一、造成重复提交主要的两个原因:
   在我们平时的开发过程中,经常可以遇到表单重复提交的问题,比如我们在做提交页面的时候,如果表单重复提交,那么一个用户就会多次的提交信息,造成重复提交,重复提交主要由于两种原因。  
  1、一种是 服务器处理时间久。当用户在表单中填完信息,点击“提交”按钮后,由于服务器没有及时响应,或者是网络原因,我们再次点击“提 交”按钮,这样我们就会在服务器端接受两条提交的数据,造成数据的重复提交。如果信息需要存储到后台数据库中,如此以来就会产生数据库操作异常提示信息,从而导致业务功能出现错误,从而给用户的使用带来不便,用户体验度不是很好。
   2、另一种就是forward跳转引起的重复提交。在页面跳转的时候,有两种类型:请求转发和重定向,请求转发是在服务器端进行跳转,此时浏览器中的地址不会发生改变,重定向是在客户端发生跳转,跳转时候浏览器中的地址栏会发生改变,如果我们在提交表单时,使用了请求转发,那么当我们刷新页面时,访问的地址还是原来的地址,这样呢我们就会在一次的访问之前的地址,这样就会引起表单的重复提交。



 二、解决方案
    方案一、使用struts2中的拦截器

    1)使用token

     <package name=" interceptor0" namespace="/interceptor" extends="struts-default">
        <action name="interceptor1"  class="com.baidu.com.interceptor0">
            <interceptor-ref name="defaultStack" />
            <!--使用token拦截器-->
            <interceptor-ref name="token" />
              <!--拦截到后的输出界面-->
              <result name="invalid.token">/index.jsp</result>         
            <result name="success">/welcome.jsp</result>
        </action>
    </package>

    2)使用tokenSession

    <action name="interceptor2"  class="com.baidu.com.interceptor0">
            <interceptor-ref name="defaultStack" />
            <interceptor-ref name="tokenSession" />
            <result name="success">/welcome.jsp</result>
 </action>

    方案二:使用重定向

    在struts2中,struts.xml的result标签默认是转发(dispatcher),请求转发当我们再次提交时地址栏不变,所以我们就要用到重定向来解决问题。我们需要将struts.xml的result标签设置成(redirectAction),这样就不会再次重复的提交数据,造成数据的重复提交。





0 0
原创粉丝点击