在web.xml文件中,可以發現
<servlet-mapping>
<servlet-name>com.metaparadigm.jsonrpc.JSONRPCServlet</servlet-name>
<url-pattern>/JSON-RPC</url-pattern>
</servlet-mapping>
所有的請求提交到這個Servlet后分發處理并做出響應。
JSONRPCServlet.java中實現了init()和service(),
init() 中只是取了些配置參數作了相關設置;
service() 中實現了請求處理;
1.從session中創建/獲取JSONRPCBridge對象;
2.把提交的數據裝入一個JSONObject對象中;
3.用JSONRPCBridge對象的call方法處理JSONObject對象并返回JSONRPCResult對象。
這個處理較ajax-buffalo 中的處理單調了不少。
再來看看JSONRPCBridge.java是如何構建的。
1.內置6個內部類:CallbackData、ClassData、LocalArgResovleData、MethodCandidate、MethodKey、ObjectInstance;
2.還有一些輔助處理的方法,比較多(提取為一個或者多個輔助類比較好);
3.核心的就是call()方法了。運用的是java反射機制,進行方法調用。這個方法寫的也比較長,沒仔細看,只看到有它兩個可取的地方,一個就返回對象的序列化,另一個是對不同異常,給出相應返回的處理比較細致,這樣有利于找到異常在什么地方,估計是原因引起的。
在客戶端的處理,是把各方法、對象串連在一起,封裝后,便于應用。
它把請求的數據對象化再以串的形式提交,后端再做一個反向操作,方便了數據處理。這種方式比ajax-buffalo 中把數據組織成一個XML結構的數據包提交、處理效率高。