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

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

2014-09-30 14:08 302 查看
转自:/article/1423426.html

今天介绍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代码:

[java] view
plaincopyprint?

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利用令牌解决重复提交的问题,敬请关注!

转自:/article/1423426.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: