分享
 
 
 

多重提交处理(一)

王朝other·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

原文:http://www.onJava.com/pub/a/onjava/2003/04/02/multiple_submits.Html

现代网络站点(web site)的主要任务是显示动态内容。从某些角度看,就是指用户将输入信息发送给网络应用(web application)进行处理之后网络应用再将处理结果发送回用户。某些特别情况下,从用户角度看后端操作运行足够快并且一切正常。但是在有些时候,后端的处理往往会因为出现较多的时间消耗而引起延迟。这种延迟有可能过长而最终使用户认为是其自己的操作错误,他们也许会放弃当前的操作或重新提交请求。

处理操作运行周期的事件过长并不是一个新问题。Java提供的健壮的线程机制能够建立起后台的任务分配。另外,随着EJB 2.0规范的出现,基于消息的EJB(简称MDB)能够被用来执行后台操作。不过请记住,这些机制是为了处理异步操作而设计的。从你启动了一个线程或后台处理,到某段时间之后你被通知或者是需要查看结果,整个过程完全是异步的。

对于轻型的长时间运行的一般同步应用仍然会引起大量处理的问题你有何看法?想象一下,一个音乐爱好者(concert goer???)登陆她喜欢的网站为一场刚开始售票的演出订票(我想起了最近BrUCe Springsteen的演唱会)。在通常情况下,网站会很好的执行并且我们的音乐爱好者能够以她自己的方式买到票。可是,当负载很大时,服务器便会慢下来,使该用户的操作不能顺利进行(用户会以为自己的订购操作失败了),因此她会接二连三的点击"提交"按钮。不幸的是,每一次点击"提交"都把之前的订票操作中止了。

有很多方法处理这种情况。最显而易见的方法是防止用户重复提交相同请求。另外也可以跟踪用户先前提交的请求并回复先前的提交动作。下图显示了一个简单的服务端小程序(servlet)的输出数据,该程序处理每一个收到的请求,为每一个请求分配一个票号。

处理简单的提交任务

最主要和最有效解决多重提交问题的方法就是防止这种情况发生。下面列出的HTML程序ConcertTickets.html是一个简单的表单,用于获取由用户输入的音乐会名字并提交给服务端小程序(servlet)订票。当网站相应迅速时处理执行的很好。但是,如果网站处于性能很低的状态并且提交的任务处理不够快,用户认为失败后会重新提交。处理过程在表1下的图2中显示。

表1:ConcertTickets.html

01: <html>

02: <head><title>Online Concert Tickets</title></head>

03:

04: <center><h1>Order Tickets</h1></center>

05:

06: <form name="Order" action="./SimpleOrder" method="GET">

07: <table border="2" width="50%" align="center" bgcolor="CCCCCC">

08: <tr><td align="right" width="40%">Concert: </td>

09: <td width="60%"><input type="text" name="Concert" value=""></td></tr>

10:

11: <tr><td colspan="2" align="center">

12: <input type="submit" name="BTnSubmit"

13: value="Do Submit"></td></tr>

14: </table>

15: </form>

16: </body>

17: </html>

防止多重提交

最简单的解决多重提交问题的方法是防止这种情况发生。

下面是我们表1中表单程序的一个修改,加入了少量的javascript脚本。内嵌的JavaScript脚本记录以前“提交”按钮被点击的次数。在用户再次提交时,将会弹出报警窗口并且表单不会再被提交。我们能够通过给“提交”按钮加入onClick事件属性来缩短普通提交处理过程的周期。每次提交按钮被点击时,onClick的代码就会执行。在我们这个例子中,会引起JavaScript脚本函数checksubmitcount()被调用。但仅仅调用一个函数并不会真正起到作用。如果我们只是加入onClick,每次提交按钮被点击时我们会收到弹出的警报,而任务提交也会立即发生。用户会被警告她操作错误,但是请求还是会被提交。这样做仅仅对用户端有了一定的改善。而在服务端结果是一样的:多重提交。

表2:Concert2.html

01: <html>

. . .<!—与表1 :ConcertTickets.html程序02~11相同 //-->

12: <input type="button" name="btnSubmit"

13: value="Do Submit"

14: onClick="checksubmitcount();"></td></tr>

15: </table>

16: </form>

17:

18: <script language="javascript">

19: <!--

20: var submitcount = 0;

21: function checksubmitcount()

22: {

23: submitcount++;

24: if (1 == submitcount )

25: {

26: document.Order.submit();

27: }

28: else

29: {

30: if ( 2 == submitcount)

31: alert("You have already submitted this form");

32: else

33: alert("You have submitted this form"

34: + submitcount.toString()

35: + " times already");

36: }

37: }

38: //-->

39: </script>

40: </body>

41: </html>

我们能通过更进一步和更精细的改变我们网页的工作方式来解决问题。敏锐的读者可能会注意到对表单添加的改变。程序第12行定义的按钮类型原先为”submit”,现在改成了”button”。而网页界面是完全相同的。可是,与表单相关的默认动作(程序第6行,调用服务端小程序)不再是自动执行的了。我们现在能够通过程序控制表单向服务器端的提交,我们的问题也得到了解决,不是么?

matrix开源技术经onjava授权翻译并发布.

如果你对此文章有任何看法或建议,请到Matrix论坛发表您的意见.

注明: 如果对matrix的翻译文章系列感兴趣,请点击oreilly和javaworld文章翻译计划查看详细情况

您也可以点击-fpwang查看翻译作者的详细信息 (出处:http://www.knowsky.com)

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有