在2月份實習的時候,公司給我們的第一個任務就是閱讀開源項目的原始碼,我選擇的是dwr。由於剛開始實習的時候,在前端技術中心,故主要分析了下前端的代碼和互動協議。
前面寫了兩篇入門執行個體,也做了一些簡單的分析使用。本篇本應該在實習的時候就發出來的,但是由於本人過於懶惰和各種其他種種原因,沒有繼續寫下去。最近一項,目用到dwr,又恰恰使用到這個功能,所以想了想還是發出來做個筆記記錄吧。
這個功能就是dwr的批請求,這個可以在一個http請求裡面,調用幾個java方法,這也屬於dwr的一個基礎功能,屬於入門層級的,但是在項目中應該是非常實用和經常會使用到的吧。只需要你在javascript代碼裡面寫上如下幾句代碼結構就可以實現批處理請求了:
dwr.engine.beginBatch(); //開始一個批請求//中間寫你需要調用的java方法,調用格式一般是JAVAClassName.method(),JAVAClassName這是需要在dwr.xml中配置的,這個在前面兩篇裡面說過的dwr.engine.endBatch();//完成一次批request
下面是dwr執行這個批處理的一個流程圖:
在調用java後台方法時候JAVAClassName.method()的時候這個方法會調用如下方法執行。
ždwr.engine._execute(path , scriptName , methodName , args)。
流程如下:
如果是單請求那麼beginBatch、addCall和endBatch,將都在_execute這個方法裡面完成。如果是批請求:先調用dwr.engine.beginBatch(); 開始一個批請求,將建立一個batch,那麼在_execute方法裡面就會把singleShot設定為true,可以看上面的流程圖。singleShot為true那麼就不會調用dwr.engine.endBatch()結束請求(發出ajax調用),故這樣execute這個方法裡面就主要調用的addCall這個方法添加請求(實際是不會發出ajax請求的),最後我們手動調用endBatch才結束,這時才真正的發出ajax請求,調用背景方法。
當時也寫了個更為詳細的ppt,等我整理了再上傳上來(http://download.csdn.net/detail/lazy_p/3635924)。