`

国人:JSON-RPC之初识

阅读更多
相关链接
1 json-rpc-for-java
http://code.google.com/p/json-rpc-for-java/downloads/list
2 国人的json-rpc-for-java比老外的更好用
http://blog.csdn.net/jxpath/archive/2009/11/27/4888260.aspx
使用之后发现这个框架:JSON-RPC要注意的三个地方,其它还有什么就没有试出来了呀
1 JavaBean对象要用默认的无参构造函数,必须实现 java.io.Serializable序列化接口
2 JS方面: 必须注意:你的参数是String类型请在前后加',如:{username:'张三'}, 如是空值后台也会报错!
在传递对象请确保:参数类型的正确性,如你在age年龄中输入了非数字后台将报错!
3 通过在web.xml中注册的方式不能用!

更多精彩请参见官方示例:有更强大的级联调用
一 环境:XP+Myeclipse6.6+Tomcat7+JDK1.6
二 项目目录结构如下图

1 UserJSON.java
package jcore.jsonrpc.rpcobj;
//必须是jcore.jsonrpc.rpcobj包下才可以免注册
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import jcore.jsonrpc.common.JsonRpcObject;
import jcore.jsonrpc.entity.User;

public class UserJSON extends JsonRpcObject  implements java.io.Serializable{

	private static final long serialVersionUID = 1L;
	
	/**
	 * 直接返回普通类型
	 * */
	public String helloJSONPRC(String userName){
		//可从getAllInputParms获取页面值
		//String userName = (String)this.getAllInputParms().get("userName");	
		return "Hello World "+userName +" !";	
	}
	
	/***
	 * 返回JavaBean类型
	 * */
	public User getUser(){
		return new User(1,"张三","123456",25);
	}
	
	public String saveUser(User user){
		System.out.println("id: "+user.getUserId() + ",name:" + user.getUserName() + ",password: " + user.getUserPassword() + ",age: " + user.getAge());
		return "保存用户成功!";
	}
	
	
	/**
	 * 返回List集合
	 * */
	public List<User> getUserAll(){
		
     	List<User> users = new ArrayList<User>();
     	users.add(new User(1,"张三","123456",25));
     	users.add(new User(2,"李逵","123123",20));
     	return users; 		
	}
	
	/**
	 * 返回Map集合
	 * */
	public Map<String,User> getUserMapAll(){
		
     	Map<String,User> maps = new HashMap<String,User>();
     	maps.put("1",new User(1,"张三","123456",25));
     	maps.put("2",new User(2,"李逵","123123",20));
     	return maps; 		
	}
}

2 User.java
package jcore.jsonrpc.entity;

public class User implements java.io.Serializable{

	private static final long serialVersionUID = 1L;
	private int userId;
	private String userName ;
	private String userPassword;
	private int age ;
	public int getUserId() {
		return userId;
	}
	public void setUserId(int userId) {
		this.userId = userId;
	}
	public String getUserName() {
		return userName;
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}
	public String getUserPassword() {
		return userPassword;
	}
	public void setUserPassword(String userPassword) {
		this.userPassword = userPassword;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public User(int userId, String userName, String userPassword, int age) {
		super();
		this.userId = userId;
		this.userName = userName;
		this.userPassword = userPassword;
		this.age = age;
	}
	
	/**
	 * 必须注意:JSON-RPC必须要求你的JavaBean对象要用默认的无参构造函数
	 * */
	public User(){
		
	}
}

3 web.xml
<servlet>
		<servlet-name>JSONRPCServlet</servlet-name>
		<servlet-class>
			jcore.jsonrpc.servlet.JSONRPCServlet
		</servlet-class>		
		<load-on-startup>2</load-on-startup>		
	</servlet>
	<servlet-mapping>
		<servlet-name>JSONRPCServlet</servlet-name>
		<url-pattern>/JRPC</url-pattern>
	</servlet-mapping>

3 index.jsp
<%@ page language="java"  pageEncoding="UTF-8" contentType="text/html; charset=UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">    
    <title>JSON-RPC</title>
	<script type="text/javascript">
     var contextPath = "<%=path%>";// 关键的地方
   </script>
   <script type="text/javascript" charset="UTF-8" src="js/JsonRpcClient.js"></script>
	<script type="text/javascript">
	  var myrpc = rpc.UserJSON;	
	  /**
	  传递变通字符串
	  */
	  function helloName(){	 
	    var userName = document.getElementById("userName").value;
	  	alert(myrpc.helloJSONPRC(userName));
	  }
	  
	  /**
	  传递javaBean对象
	  */
	  function saveUser(){
	    /**
	    必须注意:你的参数是String类型请在前后加',如:{username:'张三'}
	    如是空值后台也会报错!!
	    在传递对象请确保:参数类型的正确性,如你在age年龄中输入了非数字后台将报错!
	    */
	  	var user = "{";
	  	user += "userId:"+ document.getElementById("userId").value;
	  	user += ",userName:'"+document.getElementById("userName").value+"'";
	  	user += ",userPassword:'"+document.getElementById("userPassword").value+"'";
	  	user += ",age:"+document.getElementById("age").value;
	  	user += "}";
	  	var message = myrpc.saveUser(user);
	  	alert(message);	  	
	  }
	  
	  /**
	  获取对象
	  */
	  function getUser(){
	    var user = myrpc.getUser();
	  	document.getElementById("userId").value = user.userId;
	  	document.getElementById("userName").value = user.userName;
	  	document.getElementById("userPassword").value = user.userPassword;
	  	document.getElementById("age").value = user.age;
	  }
	  
	  /**
	  获取集合对象
	  */
	  function listUser(){
	  	var users = myrpc.getUserAll();
	  	var size = users.length;
	  	var userInfo = "<table border='1'>";
	  	userInfo += "<tr>";
  		userInfo += "<td>ID</td>";
  		userInfo += "<td>姓名</td>";
  		userInfo += "<td>密码</td>";
  		userInfo += "<td>年龄</td>";
  		userInfo += "</tr>";
	  	var user = '';
	  	for(var i =0;i<size;i++){
	  	    user = users[i];
	  		userInfo += "<tr>";
	  		userInfo += "<td>"+user.userId+"</td>";
	  		userInfo += "<td>"+user.userName+"</td>";
	  		userInfo += "<td>"+user.userPassword+"</td>";
	  		userInfo += "<td>"+user.age+"</td>";
	  		userInfo += "</tr>";
	  	}
	  	userInfo += "</table>";
	  	document.getElementById("userInfo").innerHTML = userInfo;
	  }
	  
	  
	  /**
	   获取Map对象
	  */
	  function mapUser(){
	  	var users = myrpc.getUserMapAll();
	  	var size = users.length;
	  	var userInfo = "<table border='1'>";
	  	userInfo += "<tr>";
  		userInfo += "<td>ID</td>";
  		userInfo += "<td>姓名</td>";
  		userInfo += "<td>密码</td>";
  		userInfo += "<td>年龄</td>";
  		userInfo += "</tr>";
	  	var user = '';
	  	for(var u in users){	  	    
	  	    user = users[u];
	  	    if(user.userId == undefined){	  	       
	  	    	break;
	  	    }
	  		userInfo += "<tr>";
	  		userInfo += "<td>"+user.userId+"</td>";
	  		userInfo += "<td>"+user.userName+"</td>";
	  		userInfo += "<td>"+user.userPassword+"</td>";
	  		userInfo += "<td>"+user.age+"</td>";
	  		userInfo += "</tr>";
	  	}
	  	userInfo += "</table>";
	  	document.getElementById("userInfo").innerHTML = userInfo;
	  }
	  
	  
	  function testRegObject(){
	  	alert(rpc.getRpcObj("com.liuzd.json.web.action.TestJson").testHello("欢迎天涯!!"));
	  }  
	
	</script>
  </head>
  
  <body>
     ID: <input type="text" name="userId" id="userId">
     <br>
     姓名: <input type="text" name="userName" id="userName">
     <br>
     密码: <input type="text" name="userPassword" id="userPassword">
     <br>
      年龄:<input type="text" name="age" id="age">
     <br>
     <input type="button" value="测试" onclick="helloName();">
     <br>
     <input type="button" value="获取User" onclick="getUser();">
      <br>
     <input type="button" value="保存User" onclick="saveUser();">
     <br>
     <input type="button" value="List显示" onclick="listUser();">
      <br>
     <input type="button" value="map显示" onclick="mapUser();">
     <br>
     <input type="button" value="测试未注册的对象" onclick="testRegObject();">
     <br>        
     <div id="userInfo">     
     </div>
  </body>
</html>

4 TestJSON.java未注册的使用
A TestJSON.java code
package com.liuzd.json.web.action;
// 不是jcore.jsonrpc.rpcobj包下要进行注册
public class TestJson  implements java.io.Serializable{

	
	private static final long serialVersionUID = 1L;

	public String testHello(String hello){
		return hello;
	}
}

B JS调用方式
 function testRegObject(){
	  	alert(rpc.getRpcObj("com.liuzd.json.web.action.TestJson").testHello("欢迎天涯!!"));
 }  

个人觉得这种方式不错吧!
工程附件说明:
JsonRpcForJava3.2_sample.rar官方示例
TestJsonRPC-project.zip 我的DEMO示例
JSON-RPC-lib.zip 所要的jar重新打包:JSON-RPC.jar文件
  • 大小: 18.2 KB
分享到:
评论

相关推荐

    json-smart-2.4.7-API文档-中文版.zip

    赠送jar包:json-smart-2.4.7.jar; 赠送原API文档:json-smart-2.4.7-javadoc.jar; 赠送源代码:json-smart-2.4.7-sources.jar; 赠送Maven依赖信息文件:json-smart-2.4.7.pom; 包含翻译后的API文档:json-smart...

    json-smart-2.3-API文档-中文版.zip

    赠送jar包:json-smart-2.3.jar; 赠送原API文档:json-smart-2.3-javadoc.jar; 赠送源代码:json-smart-2.3-sources.jar; 赠送Maven依赖信息文件:json-smart-2.3.pom; 包含翻译后的API文档:json-smart-2.3-...

    json-rpc.jar 和 jsonrpc.js

    JSON-RPC-Java是一个用Java来实现动态JSON-RPC的框架. 利用它内置的一个轻级量JSON-RPC JavaScripIt客户端,可以让你透明地在JavaScript中调用Java代码。JSON-RPC-Java可运行在Servlet容器中如Tomcat也可以运行在...

    JSON-RPC-Java实例

    JSON-RPC-Java是一个用Java来实现动态JSON-RPC的框架. 利用它内置的一个轻级量JSON-RPC JavaScripIt客户端,可以让你透明地在JavaScript中调用Java代码。JSON-RPC-Java可运行在Servlet容器中如Tomcat也可以运行在...

    android-json-0.0.20131108.vaadin1-API文档-中文版.zip

    赠送jar包:android-json-0.0.20131108.vaadin1.jar; 赠送原API文档:android-json-0.0.20131108.vaadin1-javadoc.jar; 赠送源代码:android-json-0.0.20131108.vaadin1-sources.jar; 赠送Maven依赖信息文件:...

    maven中 引入jar报错:Missing artifact net.sf.json-lib:json-lib:jar:2.4

    &lt;groupId&gt;net.sf.json-lib&lt;/groupId&gt; &lt;artifactId&gt;json-lib &lt;version&gt;2.4 &lt;classifier&gt;jdk15 或者直接下载这个包

    json-simple-3.0.2-API文档-中英对照版.zip

    赠送jar包:json-simple-3.0.2.jar; 赠送原API文档:json-simple-3.0.2-javadoc.jar; 赠送源代码:json-simple-3.0.2-sources.jar; 赠送Maven依赖信息文件:json-simple-3.0.2.pom; 包含翻译后的API文档:json-...

    json-20180813-API文档-中文版.zip

    赠送jar包:json-20180813.jar; 赠送原API文档:json-20180813-javadoc.jar; 赠送源代码:json-20180813-sources.jar; 赠送Maven依赖信息文件:json-20180813.pom; 包含翻译后的API文档:json-20180813-javadoc-...

    android-json-rpc

    android-json-rpc是一个在android程序中使用的JSON-RPC客户端类库。它提供了一个简单的API来执行JSON-RPC服务调用

    json-smart-2.3-API文档-中英对照版.zip

    赠送jar包:json-smart-2.3.jar; 赠送原API文档:json-smart-2.3-javadoc.jar; 赠送源代码:json-smart-2.3-sources.jar; 赠送Maven依赖信息文件:json-smart-2.3.pom; 包含翻译后的API文档:json-smart-2.3-...

    json-rpc-for-java

    继《JavaScript高级应用与实践》之后推出的json-rpc-for-java开源代码,是仅仅100行的javascript代码和不到10个java文件实现的超级轻量级的通过 javaScript快速调用...这就是这个轻量级json-rpc-for-java的神奇之处。

    JSON-RPC 2.0 规范(中文版)

    JSON-RPC 2.0 规范(中文版)。 JSON-RPC是一个无状态且轻量级的远程过程调用(RPC)协议。 本规范主要定义了一些数据结构及其相关的处理规则。它允许运行在基于socket,http等诸多不同消息传输环境的同一进程中。其使用...

    json-rpc-java-talk-20050225.pdf

    json-rpc-java-talk-20050225.pdfjson-rpc-java-talk-20050225.pdfjson-rpc-java-talk-20050225.pdfjson-rpc-java-talk-20050225.pdf

    json-smart-2.4.7-API文档-中英对照版.zip

    赠送jar包:json-smart-2.4.7.jar; 赠送原API文档:json-smart-2.4.7-javadoc.jar; 赠送源代码:json-smart-2.4.7-sources.jar; 赠送Maven依赖信息文件:json-smart-2.4.7.pom; 包含翻译后的API文档:json-smart...

    JsonRpc-Cpp

    JsonRpc-Cpp provides a JSON-RPC class called Json::Rpc::Handler that contains RPC methods, check incoming JSON-RPC message, * reply either with success or error code (in case parsing failed, ...). *...

    node-jsonrpc2:JSON-RPC 2.0服务器和客户端库,带有HTTP(具有Websocket支持)和TCP端点

    npm install json-rpc2 --save 从1.x更改 使用本机EventEmitter而不是EventEmitter3 从0.x更改 以前, id成员是宽松的,实际上不会遵守RFC,除了undefined之外,还允许任何其他内容。 如果您的应用程序依赖

    json-rpc-1.0(with source).rar

    网上的json-rpc和它的源代码大多都不是完整的,这个里面是一一对应的,完整的源码包。里面有一个json-rpc-1.0.jar和一个json-rpc-1.0-source.jar

    oshi-json-3.4.2-API文档-中文版.zip

    赠送jar包:oshi-json-3.4.2.jar; 赠送原API文档:oshi-json-3.4.2-javadoc.jar; 赠送源代码:oshi-json-3.4.2-sources.jar; 赠送Maven依赖信息文件:oshi-json-3.4.2.pom; 包含翻译后的API文档:oshi-json-...

Global site tag (gtag.js) - Google Analytics