隨筆 - 2  文章 - 1  trackbacks - 0
          <2009年11月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          和我聯(lián)系

           和我聯(lián)系

          天氣


          站內(nèi)搜索

          每日一句

          Dict.CN

          常用鏈接

          留言簿(1)

          隨筆檔案(2)

          文章檔案(1)

          搜索

          •  

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          工作中,需要用到JSON RPC,整了個(gè)小例子,并將實(shí)現(xiàn)過(guò)程貼出來(lái),供新學(xué)者參考:至于JSON RPC的原理,在網(wǎng)上有很多文章,在此不再多言:
          (1)獲得JSON RPC支持,JSON RPC是一個(gè)客戶端與服務(wù)器異步通訊機(jī)制,為實(shí)現(xiàn)JSON RPC,先得到JAR包,及其JS文件。也可以導(dǎo)入JSON RPC 源碼到工程中。我在這現(xiàn)這個(gè)例子時(shí),是導(dǎo)入了其源碼。
          (2)修改web.xml配置,當(dāng)工程啟動(dòng)時(shí),服務(wù)器加裁json rpc 相應(yīng)的servlet ,獲得容器支持,加入如下配置:

          <!-- 用于JSON RPC -->
           <servlet>
            <servlet-name>JSONRPCServlet</servlet-name>
            <servlet-class>
             com.metaparadigm.jsonrpc.JSONRPCServlet
            </servlet-class>
            <load-on-startup>2</load-on-startup>
           </servlet>
           <servlet-mapping>
            <servlet-name>JSONRPCServlet</servlet-name>
            <url-pattern>/JSON-RPC</url-pattern>
           </servlet-mapping>

          (3)創(chuàng)建后臺(tái)類(lèi)文件:此例中用到兩個(gè)類(lèi) Examle.java,User.java
          User.java類(lèi),如下:

          package test;

          import java.io.*;

          public class User implements Serializable{

           /**
            *
            */
           private static final long serialVersionUID = 1L;
           
           private String name;
           private int age;
           public String getName() {
            return name;
           }
           public void setName(String name) {
            this.name = name;
           }
           public int getAge() {
            return age;
           }
           public void setAge(int age) {
            this.age = age;
           }
           
          }


          Example.java 類(lèi)如下:
          package test;

          import java.io.*;

          public class Example implements Serializable {

           /**
            *
            */
           private static final long serialVersionUID = 1L;
           
           public String aboutMe(User user){  
            String str="您好,我是"+user.getName()+",今年"+user.getAge()+"歲";
            return str;
           }

           public String aboutMe(){  
            String str="您好,我是張三,今年30歲";
            return str;
           }

          }


          (4)創(chuàng)建前臺(tái)訪問(wèn)JSP文件,并編寫(xiě)相應(yīng)的JS代碼:jsonrpc.jsp

          <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
          <%
          String path = request.getContextPath();
          String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
          %>

          <jsp:useBean id="JSONRPCBridge" scope="session"
           class="com.metaparadigm.jsonrpc.JSONRPCBridge" />
          <jsp:useBean id="example" scope="session"
           class="test.Example" />
          <%
          JSONRPCBridge.registerObject("example", example);
          %>


          <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
          <html>
            <head>
              <base href="<%=basePath%>">
             
              <title>My JSP 'jsonrpc.jsp' starting page</title>
             
           <meta http-equiv="pragma" content="no-cache">
           <meta http-equiv="cache-control" content="no-cache">
           <meta http-equiv="expires" content="0">   
           <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
           <meta http-equiv="description" content="This is my page">
           <!--
           <link rel="stylesheet" type="text/css" href="styles.css">
           -->
           
           <script type="text/javascript" src="js/util/jsonrpc.js"></script> 
           <script type="text/javascript">

           <!--jsonrpc 客戶端JS代碼 -->
           var jsonrpc=null;
           function onLoad(){
            jsonrpc=new JSONRpcClient("JSON-RPC"); 
           }
            
           function aboutme_1(){
            var str1=jsonrpc.example.aboutMe();
            alert(str1); 
           }


           function aboutme_2(name,age){
            var user={"javaclass":"test.User","name":name,"age":age};
            var str2=jsonrpc.example.aboutMe(user);
            alert(str2);
           } 
           
           </script>

            </head>
           
            <body onload="onLoad()">
              JSON RPC 測(cè)試頁(yè),通過(guò)JS異步獲取遠(yuǎn)程服務(wù)器后臺(tái)信息,在IE上顯示。
              <br>
              <br>
              異步調(diào)用后臺(tái)數(shù)據(jù),在前臺(tái)顯示
              <input type=button id="aboutme_1" value=" show aboutme" onclick="aboutme_1()"><br><br>
              通過(guò)客戶端傳入的信息,構(gòu)造一個(gè)對(duì)象,傳到后臺(tái),再在前臺(tái)顯示
              <input type=button id="aboutme_2" value=" show aboutme" onclick="aboutme_2('李四','32')">
            </body>
          </html>


          在JSP頁(yè)面文件中,有幾點(diǎn),本人以為是比較重要的:
          (1)通過(guò)useBean,載入JSONRPCBridge實(shí)例,并用同樣的方式,載入業(yè)務(wù)處理類(lèi)實(shí)例example.
          <jsp:useBean id="JSONRPCBridge" scope="session"
           class="com.metaparadigm.jsonrpc.JSONRPCBridge" />
          <jsp:useBean id="example" scope="session"
           class="test.Example" />
          (2)將前面加裁的example注冊(cè)到JSONRPCBridge
          <%
          JSONRPCBridge.registerObject("example", example);
          %>
          (3)引入Jsonrpc 的js  <script type="text/javascript" src="js/util/jsonrpc.js"></script> 
          (4)在頁(yè)面加載時(shí)new一個(gè)JSON RPC 客戶端,這一步不可少
              var jsonrpc=new JSONRpcClient("JSON-RPC"); 
          (5)以上準(zhǔn)備好后,在客戶端就可以與服務(wù)器進(jìn)行異步通訊了

           

           

           

           





           

          posted on 2009-06-18 17:22 JINBO~~ 閱讀(2684) 評(píng)論(1)  編輯  收藏

          FeedBack:
          # re: json rpc 實(shí)現(xiàn) 2009-11-27 14:28 風(fēng)情主人
          中國(guó)人真的很悲哀,總是小看身邊的人,而覺(jué)得其他遠(yuǎn)處的人更厲害,其他公司的人更好,總覺(jué)得中國(guó)的就沒(méi)有老外的好;
          而事實(shí)上:國(guó)人的json-rpc-for-java比老外的更好用

          國(guó)人的:http://code.google.com/p/json-rpc-for-java/
          老外的:http://oss.metaparadigm.com/jsonrpc/進(jìn)行對(duì)比而言----

          對(duì)比理由如下:

          1、都需要在web.xml注冊(cè)(代碼量差不多)

          2、老外的每個(gè)java服務(wù)對(duì)象都需要做繁瑣的注冊(cè),而國(guó)人的json-rpc-for-java 服務(wù)對(duì)象都不需要再進(jìn)行注冊(cè)就可以直接在js中使用

          3、老外的json-rpc返回的java對(duì)象,不能在js中調(diào)用返回的java對(duì)象的方法,也就是級(jí)聯(lián)調(diào)用;
          國(guó)人的json-rpc-for-java則支持無(wú)限制的級(jí)聯(lián)調(diào)用,而無(wú)需任何注冊(cè)或特殊處理的地方

          4、調(diào)用上
          老外的:var list = {"javaClass":"java.util.ArrayList", "list":[1, 2, 3]};
          jsonrpc.hello.sayList(cbList, list);
          國(guó)人的:rpc.getRpcObj('test.rpc.MyTestRpc').getTestMsg(),或者rpc.MyTestRpc.getTestMsg()
          國(guó)人的直接支持Map和JavaBean作為入口參數(shù)傳入 rpc.MyTestRpc.getTestMsg({id:33, name:"test", sex:'女'})   回復(fù)  更多評(píng)論
            

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 沂水县| 海淀区| 平湖市| 怀柔区| 永川市| 宁武县| 嘉鱼县| 梧州市| 东乌珠穆沁旗| 裕民县| 康平县| 微博| 宽甸| 永寿县| 安乡县| 全椒县| 阿坝| 酒泉市| 体育| 凯里市| 凤台县| 台北市| 类乌齐县| 邛崃市| 万全县| 禄丰县| 东丰县| 平定县| 温州市| 娱乐| 丹阳市| 鹤峰县| 横峰县| 新宾| 太原市| 巩义市| 高阳县| 广德县| 宣化县| 永清县| 泊头市|