收藏私塾在线
 

欢迎您来到私塾在线网!   

请登录! 

免费注册 


struts2的笔记
状态: 离线
人气:613665
访问用户量:855
笔记经验:
总积分: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 什么是重复提交
浏览(6957)|评论(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获取更多内容

精品视频课程推荐

Java数据结构和算法精讲版
本课程专注于数据结构和算法的内容,使用Java来进行代码示例,不空洞的讲解概念和理论,重点放在代码的实现和示例上。 从零开始、全面系统、成体系的讲解数据结构和基本算法,循序渐进的讲述构建软件系统所常见的数据结构和算法。

深入浅出学Shrio视频教程
内容概述:Shiro是目前最热门、最易用、功能超强大的Java权限管理框架,强烈推荐,每个项目都必备的权限管理技术!通过本课程,你将从零开始直到彻底掌握Shiro的相关开发知识,达到可以进行实际项目开发的能力。包括:权限管理基础、Shiro入门、配置、身份认证、授权、Realms、Session管理、和Spring的集成、Web、Cache等众多开发细节技术 技术要点:源码级分析Shiro的授权过程、自定义开发Realm、多个Realms的开发配置、自定义开发AuthenticationStrategy、自定义开发自定义SessionDAO、和Struts2+Spring3的集成(包括修正struts2的bug)、Shiro和SpringMVC+Spring3的集成、包装使用其他的Cache框架、缓存数据同步更新的解决方案等等实际开发中常用的内容

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

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

深入浅出学Spring Web MVC视频教程
系统、完整的学习Spring Web MVC开发的知识。包括:Spring Web MVC入门;理解DispatcherServlet;注解式控制器开发详解;数据类型转换;数据格式化;数据验证; 拦截器;对Ajax的支持;文件上传下载;表单标签等内容;最后以一个综合的CRUD带翻页的应用示例来综合所学的知识

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

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

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

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