Java框架JSON-RPC项目demo代码实战

来源:互联网 发布:qq好友定位软件 编辑:程序博客网 时间:2024/05/22 03:03

原文:http://blog.csdn.net/yaerfeng/article/details/26079889

原创整理不易,转载请注明出处:Java框架JSON-RPC项目demo代码实战

代码下载地址:http://www.zuidaima.com/share/1781535155162112.htm


一、JSON-RPC-Java简介        

JSON-RPC-Java是一个用Java来实现动态JSON-RPC的框架. 利用它内置的一个轻级量JSON-RPC JavaScripIt客户端,可以让你透明地在JavaScript中调用Java代码。JSON-RPC-Java可运行在Servlet容器中如Tomcat也可以运行在JBoss与其它J2EE应用服务器中因此可以在一个基于JavaScript与DHTML的Web应用程序中利用它来直接调用普通Java方法与EJB方法。我们可以很方便的使用JSON-RPC-Java来开发我的们Ajax应用。
二、JSON-RPC-Java实践
1、从 http://oss.metaparadigm.com/jsonrpc/download.html下载最新稳定版的JSON-RPC-Java框架并解压。新建一个JavaWeb工程,将jsonrpc-1.0.jar放到/webroot/WEB-INF/lib目录下,将jsonrpc.js放在/webroot下的任意目录下,保证在jsp页面可以引用即可。
2、修改/webroot/WEB-INF/web.xml文件,添加以下代码:

 

[java] view plaincopy在CODE上查看代码片派生到我的代码片
  1. <servlet>   
  2. <servlet-name>JSONRPCServlet</servlet-name>   
  3. <servlet-class>   
  4. com.metaparadigm.jsonrpc.JSONRPCServlet  
  5. </servlet-class>   
  6. </servlet>   
  7. <servlet-mapping>   
  8. <servlet-name> JSONRPCServlet </servlet-name>   
  9. <url-pattern> /JSON-RPC </url-pattern>   
  10. </servlet-mapping>  

当然这里代码不一定要和上面一模一样,有一点基础即可看出这里只是添加了一个Servlet配置而,只要符合Servlet的配置规则即可。
3、编Java文件。
         Example.java 此文件提供各种业务操作,此方件编写没有什么特别的要求。但为了在JSP页面用标签,我们最好提供一个无参的构造方法。

[java] view plaincopy在CODE上查看代码片派生到我的代码片
  1. package com.zuidaima.jiasoft;  
  2.   
  3. import java.io.Serializable;  
  4. import java.util.List;  
  5. import java.util.Map;  
  6. import java.util.Set;  
  7.   
  8. public class Example implements Serializable {  
  9.     private final static long serialVersionUID = 1L;  
  10.   
  11.     public String sayString(String name) {  
  12.         return "Hello " + name + " !";  
  13.     }  
  14.   
  15.     public List sayList(List list) {  
  16.         list.add(new Integer(6));  
  17.         return list;  
  18.     }  
  19.   
  20.     public Map sayMap (Map map) {  
  21.         map.put("age","23");  
  22.         return map;  
  23.     }  
  24.   
  25.     public Set saySet (Set set) {  
  26.         set.add("sex");  
  27.         return set;  
  28.     }  
  29.   
  30.     public User sayUser (User user) {  
  31.         user.setAge(25);  
  32.         return user;  
  33.     }  
  34. }  


User.java 此文件用于自定义数据类型传输数。要求是一个javabean,即要为每一个属性提供set和get方法,还有一个无参的构方法即可。

[java] view plaincopy在CODE上查看代码片派生到我的代码片
  1. package com.zuidaima.jiasoft;  
  2.   
  3. import java.io.Serializable;  
  4.   
  5. public class User implements Serializable {  
  6.     private String name;  
  7.     private int age;  
  8.     public int getAge() {  
  9.         return age;  
  10.     }  
  11.     public void setAge(int age) {  
  12.         this.age = age;  
  13.     }  
  14.     public String getName() {  
  15.         return name;  
  16.     }  
  17.     public void setName(String name) {  
  18.         this.name = name;  
  19.     }  
  20. }  


4、编写javascript文件。
Example.js 用于此处理客户端操作。

[jscript] view plaincopy
  1. //The javascript file of the JSON-RPC-Java example application.  
  2. var jsonrpc = null;  
  3. //初始化JSONRpcClient对象  
  4. function onLoad() {  
  5.     jsonrpc = new JSONRpcClient("JSON-RPC");  
  6. }  
  7. //提交普通的字符串对象  
  8. function sayString() {  
  9.     var who = document.getElementById("who");  
  10.     var result = jsonrpc.hello.sayString(cbString, who.value);  
  11. }  
  12. function cbString(result, exception) {  
  13.     if (exception == null) {  
  14.     document.getElementById("say").innerHTML = "<em>操作提示:提交一个字符串并返回.</em><h2>" + result + "</h2><hr/>";  
  15.     } else {  
  16.     alert(exception.message);  
  17.     }  
  18. }  
  19.   
  20. //提交一个list对象并且将其返回  
  21. function sayList() {  
  22.     var list = {"javaClass":"java.util.ArrayList""list":[1, 2, 3]};  
  23.     jsonrpc.hello.sayList(cbList, list);  
  24. }  
  25. function cbList(result, exception) {  
  26.     if (exception == null) {  
  27.         var list = result.list;  
  28.         var str = "<em>操作提示:提交一个List并返回.</em>";  
  29.         for (var value in list) {  
  30.             str += "<h2>list[" + value + "]=" + list[value] + "</h2><hr/>";  
  31.         }  
  32.         document.getElementById("say").innerHTML = str;  
  33.         //"list"可以直接用下面的语句输出  
  34.         //document.getElementById("say").innerHTML = "<h2>" + list + "</h2>";  
  35.     } else {  
  36.     alert(exception.message);  
  37.     }  
  38. }  
  39.   
  40. //提交一个map对象并且将其返回  
  41. function sayMap() {  
  42.     var map = {"javaClass":"java.util.HashMap""map":{"name":"Huaxu""sex":"\u7537"}};  
  43.     jsonrpc.hello.sayMap(cbMap, map);  
  44. }  
  45. function cbMap(result, exception) {  
  46.     if (exception == null) {  
  47.         var map = result.map;  
  48.         var str = "<em>操作提示:提交一个Map并返回.</em>";  
  49.         for (var key in map) {  
  50.             str += "<h2>" + key + ":" + map[key] + "</h2><hr/>";  
  51.         }  
  52.         document.getElementById("say").innerHTML = str;  
  53.     } else {  
  54.         alert(exception.message);  
  55.     }  
  56. }  
  57.   
  58. //提交一个set对象并且将其返回  
  59. function saySet() {  
  60.     //set属性是一个数组对象,每个数组元素就是set里的一个元素.  
  61.     var set = {"javaClass":"java.util.HashSet""set":{"name":"name"}};  
  62.     jsonrpc.hello.saySet(cbSet, set);  
  63. }  
  64.   
  65. function cbSet(result, exception) {  
  66.     if (exception == null) {  
  67.         var set = result.set;  
  68.         var str = "<em>操作提示:提交一个Set并返回.</em>";  
  69.         for (var value in set) {  
  70.             str += "<h2>" + value + "</h2><hr/>";  
  71.         }  
  72.         document.getElementById("say").innerHTML = str ;  
  73.     } else {  
  74.         alert(exception.message);  
  75.     }  
  76. }  
  77.   
  78. //提交一个自定义的User对象并且将其返回  
  79. function sayUser() {  
  80.     //每个JSON对象属性对应一个User对象属性.  
  81.     var user = {"javaClass":"com.zuidaima.jiasoft.User""name":"Huaxu""age":23};  
  82.     jsonrpc.hello.sayUser(cbUser, user);  
  83. }  
  84. function cbUser(user, exception) {  
  85.     if (exception == null) {  
  86.         var str = "<em>操作提示:提交一个自定义的User对象并返回.</em><h2>name:" + user.name + "</h2><hr/>" + "<h2>age:" + user.age + "</h2><hr/>";  
  87.         document.getElementById("say").innerHTML = str ;  
  88.     } else {  
  89.         alert(exception.message);  
  90.     }  
  91. }  


此文件中的jsonrpc.hello.say*()方法即是在Example.java中定义的。
4、编写jsp页面。
         json.jsp 这个文件做什么不用说了吧,当然给用户一个操作的介面了。

 

[java] view plaincopy在CODE上查看代码片派生到我的代码片
  1. json.jsp  
  2. Code highlighting produced by Actipro CodeHighlighter (freeware)  
  3. http://www.CodeHighlighter.com/  
0 0