随笔 - 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~~ 阅读(2673) 评论(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:'女'})   回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航: