论坛登陆 用户名:  密 码:
设为首页  加入收藏
08年北京名校秋季招生
名牌院校免试入学宽进严出,突破考分限制,名校与你零距离,以下院校按报名先后顺序录取,24小时网上报名覆盖全国
  您现在的位置: 中国教育招生在线 >> IT >> JAVA认证 >> IT正文
Web应用中避免Form重复提交的三种方案
 作者:佚名     2007-3-14 17:11:12        来源:不详  浏览次数:

 

 

 

 

 

 

 

 

Web应用中重复提交的问题的三种解决方案

前两种是利用javascript,后面一种是在使用Struts的情况下的参考实现:

1、javascript ,设置一个变量,只允许提交一次。




















<script language="javascript">
    var checkSubmitFlg = false;
    function checkSubmit()
	{
      if (checkSubmitFlg == true)
	  {
         return false;
      }
      checkSubmitFlg = true;
      return true;
   }
   document.ondblclick = 
   function docondblclick()
   {
    window.event.returnValue = false;
   }
   document.onclick =
   function doconclick()
   {
       if (checkSubmitFlg)
	   {
         window.event.returnValue = false;
       }
   }
</script>

<html:form action="myAction.do" 
method="post" onsubmit="return checkSubmit();">

2、还是javascript,将提交按钮或者image置为disable

<html:form action="myAction.do" 
method="post" 
    onsubmit="getElById('submitInput')
	.disabled = true;
	return true;
	">  
  
  <html:image 
  styleId="submitInput"
  src="images/ok_b.gif" 
  border="0" />
  
  </html:form>

3、利用struts的同步令牌机制

利用同步令牌(Token)机制来解决Web应用中重复提交的问题,Struts也给出了一个参考实现。

基本原理:

服务器端在处理到达的请求之前,会将请求中包含的令牌值与保存在当前用户会话中的令牌值进行比较,

看是否匹配。在处理完该请求后,且在答复发送给客户端之前,将会产生一个新的令牌,该令牌除传给

客户端以外,也会将用户会话中保存的旧的令牌进行替换。这样如果用户回退到刚才的提交页面并再次

提交的话,客户端传过来的令牌就和服务器端的令牌不一致,从而有效地防止了重复提交的发生。

if (isTokenValid(request, true))
{
  // your code here
    return mapping.findForward("success");
} else
{
    saveToken(request);
    return mapping.findForward
	("submitagain");
}

Struts根据用户会话ID和当前系统时间来生成一个唯一(对于每个会话)令牌的,具体实现可以参考TokenProcessor类中的generateToken()方法。

1. //验证事务控制令牌,会自动根据session中标识生成一个隐含input代表令牌,防止两次提交

2. 在action中:

//<input type="hidden" 
name="org.apache.struts.taglib.html.TOKEN" 
  // value="6aa35341f25184fd996c4c918255c3ae">
       if (!isTokenValid(request))
   errors.add(ActionErrors.GLOBAL_ERROR,
new ActionError("error.transaction.token"));
       resetToken(request);
	   //删除session中的令牌

3. action有这样的一个方法生成令牌

protected String generateToken
 (HttpServletRequest request)
 {

       HttpSession session = 
	   request.getSession();
       try
	   {
           byte id[] = 
		   session.getId().getBytes();
           byte now[] =
               new Long(System.currentTimeMillis()).
			   toString().getBytes();
           MessageDigest md =
		   MessageDigest.getInstance("MD5");
           md.update(id);
           md.update(now);
           return (toHex(md.digest()));
       } catch (IllegalStateException e)
	   {
           return (null);
       } catch (NoSuchAlgorithmException e)
	   {
           return (null);
       }
   }

(T117)


责任编辑:lss
  相关新闻
JSFToolbox--用Dreamweaver开发JSF
WebWork拦截器(Interceptor)使用方法
获得CCIEBS认证,成为IEBS证书持有者有什么利益
允许内部用户使用Outlook Web Access
欧盟同意甲骨文58.5亿美元收购Siebel
反流氓软件走向web2.0 奇虎将判定权移交网民
Web2.0时代的核心应用:Ajax简介
EasyJWeb 关于中文件上传的处理实例
Thinking in AJAX(二) —— WEB设计
Web框架趣谈之Java Web 框架的甜点
欧盟同意甲骨文58.5亿美元收购Siebel
获得CCIEBS认证,成为IEBS证书持有者有什么利益
反流氓软件走向web2.0 奇虎将判定权移交网民
比较 RIFE 与其他 Web Frameworks
EasyJWeb 关于中文件上传的处理实例
Web框架趣谈之Java Web 框架的甜点
Web2.0时代的核心应用:Ajax简介
Thinking in AJAX(二) —— WEB设计
XMLHttpRequest在Web开发利弊
用WebWork,JSP,Velocity建立注册页面
  评论
现在有100人对本文发表评论
查看所有评论
 
推  荐
 
100本成功必读热销书
热门招生
  北京文理研修学院   前进大学
  北京明园大学   北京建设大学
  北京邮电大学世纪学院   北方工商管理学院
  联想软件定向委培班   香港数码动画学院
  青年企业管理研修学院   北京华夏管理学院
热门培训
网络化办公专家培训认证 电子科技大学软件学院
软件测试工程师培训认证 北大青鸟十大授权培训
IT硬件工程师培训认证班 北京环球雅思荷兰预科
JAVA开发工程师培训 潜能时代IT服务管理培训
网络信息化工程师培训 清华大学继续教育学院
论坛精选
 
有些细节是男人也该注意的风度!最容易读错的字
某强人手机里保存的30条短信 中国十大高薪职业
最感人的十大韩剧经典台词 嫁给工程师的N个理由
爆强!只有一句话的鬼故事 转贴教你如何做妖精
 女人一定要記住的話 女人最好别嫁给最爱的男人
城市联盟
 大连 上海 天津 广州 西安 深圳  天津  青岛  大连  福州  沈阳  青海  连云港  南京  吉林  厦门  威海  辽宁  呼和浩特
Copyright © 2006   www.edu999.com   All rights reserved. 中国教育招生在线  版权所有
北京市通信管理局[2004]字第552号函    京ICP证040442号