Struts重复提交

来源:互联网 发布:怎么用java编程 编辑:程序博客网 时间:2024/04/30 18:36
1.问题的产生原因
      用Struts来实现MVC框架。这时页面提交给Action去进行业务处理,Action再跳转回前台页面,但这时URL依然是“页面提交给Action的链接”,这时前台刷新一下页面,就变成再次执行了一次提交操作;

2.解决思路
      2.1在Action页面中跳转的时候用重定向,可以在struts_config.xml中配置<forward ... redirect="true">
            不过这种方法会使得Request中放置数据丢失;
      2.2用Token令牌环来实现(这个操作也相对简单,本文章就来实现这个功能);
            提交到Action的时候,进行一系列操作,然后保存一个标志,这时再跳转到前台页面(必须用struts标签,程序会自动在该前台页面设置一个隐藏域)。如果前台页面刷新的话,Action通过查看是否有标志,就能判断用户是刷新还是提交。

3.做个Token例子(模拟一个插入数据的操作,插入数据后,返回到列表页面,这时刷新列表页,看插入操作会不会多次执行)
      3.1工程名为SubmitAgain,文件:AddUserAction.java,AddUserForm.java,index.jsp,add.jsp,list.jsp,struts_config.xml
      3.2AddUserAction.java的内容如下:

            public ActionForward execute(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response)
            {
                  AddUserForm addUserForm = (AddUserForm) form;
                  switch (addUserForm.getType())
                  {
                        case 1:// 跳转到输入插入信息页面
                              this.saveToken(request);
                              return mapping.findForward("goadd");
                        case 2:// 插入信息
                              if (this.isTokenValid(request))
                              {
                                    System.out.println("插入");
                                    this.resetToken(request);
                              }
                              else
                              {
                                    System.out.println("你在刷新页面");
                              }
                              return mapping.findForward("golist");
                  }
                  return null;
            }
      3.3AddUserForm.java里面就一个参数type及其set和get方法;
      3.4Struts_config.xml的内容如下:

            <action attribute="addUserForm" name="addUserForm" path="/addUser" scope="request" type="com.wangwz.struts.action.AddUserAction">
                  <forward name="goadd" path="/add.jsp"></forward>
                  <forward name="golist" path="/list.jsp"></forward>
            </action>
      3.5index.jsp的内容如下:
            <a href="./addUser.do?type=1">插入</a>
      3.6add.jsp的内容如下:
            <html:form action="/addUser.do">
                  <html:hidden property="type" value="2" />
                  <html:submit value="插入" />
            </html:form>
      3.7list.jsp页面中随便输入几个字即可
      3.8代码写完后,访问http://localhost:8080/SubmitAgain即可
 
原创粉丝点击