您的位置:首页 > 编程语言 > Java开发

Struts1防止页面重复提交解决方案

2013-03-18 19:16 274 查看
今天介绍struts中如果防止页面重复提交。其实关于防止重复提交的方法有很多种,如果提交之后把按钮变为不可用,利用时间戳来判断两次提交的值是否为一样等。在struts中有令牌这个概念,我是这次面试问题的根本所在,这个问题的提出其实就是想知道我在用struts的时候是不是会用struts提供的令牌来解决这个方式页面重复提交的问题。
所以在这里总结一下struts如果利用令牌来解决页面重复提交的问题的。这篇先介绍struts1框架的实现。

1、 搭建项目(省略):主要是搭建struts1框架的项目
2、 创建需要的类:需要一个action和一个actionForm(具体的代码可以用下面的连接进行下载)



3、 创建需要的页面:因为一般防止重复提交的问题是在添加中才遇到的,所以需要的页面有索引页面,添加页面,添加成功页面,添加失败页面,错误页面(这个是在重复提交之后跳转的页面)



4、 配置struts-config.xml和web.xml文件
5、 运行、测试。

具体程序源代码下载地址:http://download.csdn.net/detail/lfsf802/5153872

具体要说的就是Action代码:
public ActionForward add(ActionMapping mapping, ActionForm form,
           HttpServletRequestrequest, HttpServletResponse response)
           throws Exception {
       this.saveToken(request);
       return mapping.findForward("showadd");
    }
    public ActionForwardinsert(ActionMapping mapping, ActionForm form,
           HttpServletRequestrequest, HttpServletResponse response)
           throws Exception {
       if (this.isTokenValid(request, true)) {
           UserFormuserForm=(UserForm)form;
           System.out.println(userForm.getUsername()+"---"+userForm.getPassword());
           return mapping.findForward("addSuccess");
       }else{
           this.saveToken(request);
           return mapping.findForward("error");
       }
      
    }



这里面是从index页面调用add方法来显示添加页面,在这个过程中调用了this.saveToken(request);方法来产生令牌的,也就是在添加页面中添加一个隐含域,并且把这个隐含域的属性和值放到session中,



当添加页面点击添加的时候调用insert方法,这时候this.isTokenValid(request, true)就会判断从页面传来的令牌和session中的令牌是否一样,当然因为是第一次,所以会相等,这样就会清空session的令牌,之后跳转到添加成功或者添加失败的页面。
然而当我们在回退在此添加,这时候session的令牌没有了,所以令牌值会不相同,这时候就会跳到error页面,提示不能重复提交。
在这里需要有一点是注意的,添加页面必须使用struts1的标签来进行书写,也就是用<html:text>等标签,否则它不会自动的创建令牌的。
以上就是struts1利用令牌解决页面重复提交的问题,下一篇博客介绍struts2利用令牌解决重复提交的问题,敬请关注!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: