国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

多重提交處理(一)

2019-11-18 16:23:13
字體:
來源:轉載
供稿:網友

  原文: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 S
    有很多方法處理這種情況。最顯而易見的方法是防止用戶重復提交相同請求。另外也可以跟蹤用戶先前提交的請求并回復先前的提交動作。下圖顯示了一個簡單的服務端小程序(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://m.survivalescaperooms.com)



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 商南县| 东明县| 佛教| 炎陵县| 翁源县| 鹤峰县| 扬中市| 白河县| 上栗县| 巨鹿县| 霍山县| 上高县| 江北区| 吉水县| 陈巴尔虎旗| 壤塘县| 聂拉木县| 扶沟县| 义马市| 漯河市| 杭锦后旗| 虎林市| 太白县| 芜湖县| 台州市| 万全县| 襄樊市| 红河县| 正蓝旗| 施甸县| 博野县| 崇仁县| 遂宁市| 辽阳县| 牡丹江市| 松阳县| 桑日县| 焦作市| 高邑县| 武山县| 塔城市|