隨筆 - 2  文章 - 1  trackbacks - 0
          <2009年6月>
          31123456
          78910111213
          14151617181920
          21222324252627
          2829301234
          567891011

          和我聯系

           和我聯系

          天氣


          站內搜索

          每日一句

          Dict.CN

          常用鏈接

          留言簿(1)

          隨筆檔案(2)

          文章檔案(1)

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          工作中,需要用到JSON RPC,整了個小例子,并將實現過程貼出來,供新學者參考:至于JSON RPC的原理,在網上有很多文章,在此不再多言:
          (1)獲得JSON RPC支持,JSON RPC是一個客戶端與服務器異步通訊機制,為實現JSON RPC,先得到JAR包,及其JS文件。也可以導入JSON RPC 源碼到工程中。我在這現這個例子時,是導入了其源碼。
          (2)修改web.xml配置,當工程啟動時,服務器加裁json rpc 相應的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)創建后臺類文件:此例中用到兩個類 Examle.java,User.java
          User.java類,如下:

          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 類如下:
          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)創建前臺訪問JSP文件,并編寫相應的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 測試頁,通過JS異步獲取遠程服務器后臺信息,在IE上顯示。
              <br>
              <br>
              異步調用后臺數據,在前臺顯示
              <input type=button id="aboutme_1" value=" show aboutme" onclick="aboutme_1()"><br><br>
              通過客戶端傳入的信息,構造一個對象,傳到后臺,再在前臺顯示
              <input type=button id="aboutme_2" value=" show aboutme" onclick="aboutme_2('李四','32')">
            </body>
          </html>


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

           

           

           

           





           

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

          FeedBack:
          # re: json rpc 實現 2009-11-27 14:28 風情主人
          中國人真的很悲哀,總是小看身邊的人,而覺得其他遠處的人更厲害,其他公司的人更好,總覺得中國的就沒有老外的好;
          而事實上:國人的json-rpc-for-java比老外的更好用

          國人的:http://code.google.com/p/json-rpc-for-java/
          老外的:http://oss.metaparadigm.com/jsonrpc/進行對比而言----

          對比理由如下:

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

          2、老外的每個java服務對象都需要做繁瑣的注冊,而國人的json-rpc-for-java 服務對象都不需要再進行注冊就可以直接在js中使用

          3、老外的json-rpc返回的java對象,不能在js中調用返回的java對象的方法,也就是級聯調用;
          國人的json-rpc-for-java則支持無限制的級聯調用,而無需任何注冊或特殊處理的地方

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

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 开鲁县| 沙雅县| 阿巴嘎旗| 紫金县| 乐安县| 陆良县| 五家渠市| 浏阳市| 新晃| 改则县| 涞源县| 迁西县| 读书| 油尖旺区| 福清市| 鸡西市| 庆阳市| 类乌齐县| 宜宾市| 会同县| 星子县| 秦安县| 贵阳市| 西乌珠穆沁旗| 泸溪县| 中超| 青铜峡市| 福州市| 惠来县| 报价| 鄂尔多斯市| 绥德县| 阿图什市| 莱芜市| 桓台县| 文登市| 太仓市| 青州市| 宝应县| 永清县| 屏边|