收藏私塾在线
 

欢迎您来到私塾在线网!   

请登录! 

免费注册 


struts2的笔记
状态: 离线
人气:605647
访问用户量:853
笔记经验:
总积分:567
级别:普通会员
搜索本笔记
ta的交流分类
ta的交流主题贴(5)
ta的所有交流贴(5)
ta的全部笔记
全部笔记(89)
未分类笔记(3)
研磨struts2(86)
存档
2012-04(85)
2012-03(4)

2012-04-21 09:27:33
《研磨struts2》第十七章 防止重复提交 之 17.1 什么是重复提交
浏览(6876)|评论(0)   交流分类:Java|笔记分类: 研磨struts2

17.1  什么是重复提交

所谓重复提交,就是用户在页面多次点击提交按钮,或者通过不断刷新页面,把已经提交过的数据多次向后台提交。

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

用一个实例来让大家体会一下重复提交的问题,来实现一个订单新增的功能,订单号一般都是由后台自动生成,前台页面只要传递订购人、订购商品和订购数量等订单的具体信息过来就可以了。为了示例的简洁,只是从前台传递一个订购的商品和一个订购的数量,一共两个值就可以了,就不去处理什么订单的主记录、子记录等复杂的功能了。

1:实现Action

写一个处理订单的Action,接收前台传递过来的数据,然后输出即可。为了表示会花一定的时间来进行业务处理,在execute方法里面,让线程休息6秒,示例代码如下:

 

java代码:
public class TokenAction extends ActionSupport{
	private String productId;
	private int orderNum;
	
	public String getProductId() {
		return productId;
	}
	public void setProductId(String productId) {
		this.productId = productId;
	}
	public int getOrderNum() {
		return orderNum;
	}
	public void setOrderNum(int orderNum) {
		this.orderNum = orderNum;
	}
	public String execute() throws Exception {
		System.out.println("预定的产品编号是:"+this.productId+",预定数量为:"+this.orderNum); 
		Thread.sleep(6000L);
		System.out.println("处理完成!");
		return SUCCESS;
	}
}

2:配置Action

在struts.xml中配置Action,示例如下:

 

java代码:
    <package name="helloworld" extends="struts-default">
        <action name="tokenAction" class="cn.javass.token.TokenAction">
        	<result>/token/list.jsp</result>
        </action>
    </package>

 

java代码:
3:制作新增页面
提供新增页面来让用户输入:预定的产品编号和预定的数量,然后提交到上面的Action,示例代码如下:

 

java代码:
<%@ page language="java" contentType="text/html; charset=gb2312"
    pageEncoding="gb2312"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>Insert title here</title>
</head>
<body>
<%@ taglib prefix="s" uri="/struts-tags"%>
<s:form action="/tokenAction.action" method="post">
	<s:textfield name="productId" label="预定的产品编号"/>
	<s:textfield name="orderNum" label="预定的数量"/>
	<s:submit value="提交"/>
</s:form>
</body>
</html>

4:运行测试

运行新增页面,填写数据,然后点击提交。由于Action中,让当前线程sleep了6秒钟,所以必须等6秒之后才能正确的结束调用。

如果这个时候用户乖乖的等足6秒,自然没有什么问题。但是,如果用户在第一次提交还没有响应的时候,又再次点击了提交按钮,则同样的请求再次被提交,这时候,如果不加任何控制的话,同样的订单就将被处理两次了。

可以在控制台中看到输出以下信息:

 

java代码:
预定的产品编号是:1,预定数量为:2
预定的产品编号是:1,预定数量为:2
处理完成!
处理完成!

很明显数据重复了,这种重复提交的问题,会给业务处理带来很多的麻烦,应该在开发中杜绝这个问题。

使用Struts2框架来进行开发的话,它已经替我们想好了应对之策,还专门为此提供了<s:token/>标签,接下来就来具体看看它的使用。

 

私塾在线网站原创《研磨struts2》系列

转自请注明出处:【http://sishuok.com/forum/blogPost/list/0/4149.html

欢迎访问http://sishuok.com获取更多内容

精品视频课程推荐

研磨设计模式——跟着cc学设计系列视频教程
本视频课程是北京Java私塾原创精品书籍《研磨设计模式》一书的配套学习视频,由《研磨设计模式》的第一作者CC录制 课程目标:全面、系统的掌握GoF设计模式的知识,达到可以在实际项目开发中运用的能力 技术要点:如何实现可配置、如何实现缓存以及缓存的管理、如何实现用缓存来控制多实例的创建、如何实现参数化工厂、 如何实现可扩展工厂、如何实现原型管理器、如何实现Java的静态代理和动态代理、如何实现多线程处理队列请求、 如何实现命令的参数化配置、可撤销的操作、宏命令、队列请求和日志请求、如何实现翻页迭代、如何检测环状结构、 如何实现通用的增删改查、如何模拟工作流来处理流程、如何实现简单又通用的XML读取、如何实现模拟AOP的功能......

DWR开发初步视频教程
全面、系统的掌握DWR的核心开发知识,达到能使用DWR框架进行开发的水平 包括:DWR基本运行流程、DWR的体系结构、DWR的基本配置、构建器、转换器、DWR处理集合类型的数据、DWR结合Servlet,Struts2结合DWR

Ajax+JSON基础实战视频教程
数据校验、Javascript模拟多线程、下拉列表联动、操作XML、AJAX结合JSON的操作、Json-lib的使用

struts2结合jFreeChat视频教程
深入浅出的讲解Struts2结合JFreechart来展示图表的功能

struts2防重复提交视频教程
深入浅出的讲解在Struts2开发中,如何防止页面的重复提交

浏览(6876)|评论(0)   交流分类:Java|笔记分类: 研磨struts2

评论(0)
请登录后评论 登录

关于我们 | 联系我们 | 用户协议 | 私塾在线服务协议 | 版权声明 | 隐私保护

版权所有 Copyright(C)2009-2012 私塾在线学习网