`

国人: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
分享到:
评论

相关推荐

    jsonrpc-frontend:前端应用程序发送 json-rpc 请求进行测试

    JSON-RPC(JavaScript Object Notation Remote Procedure Call)是一种轻量级的远程过程调用协议,常用于客户端-服务器通信,特别是在Web应用中。它利用JSON作为数据交换格式,因为JSON易于阅读、编写,并且对机器...

    android-json-rpc

    "android-json-rpc"正是这样一款专为Android平台设计的JSON-RPC库,它简化了开发者在Android应用程序中执行JSON-RPC服务调用的过程。 该库的核心特性包括: 1. **简单易用的API**:android-json-rpc提供了一个直观...

    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-java-1.0源代码

    JSON-RPC(JavaScript Object Notation Remote Procedure Call)是一种轻量级的远程调用协议,它使用JSON(JavaScript Object Notation)作为数据交换格式。在Java中实现JSON-RPC,可以帮助开发者构建分布式系统,...

    json-rpc-java-1.0.zip

    JSON-RPC(JavaScript Object Notation Remote Procedure Call)是一种轻量级的远程调用协议,它使用JSON(JavaScript Object Notation)作为数据交换格式。在Java环境中实现JSON-RPC,可以帮助开发者构建分布式系统...

    json-rpc-1.0(with source).rar

    JSON-RPC(JavaScript Object Notation Remote Procedure Call)是一种轻量级的远程过程调用协议,它使用JSON(JavaScript Object Notation)作为数据交换格式。JSON-RPC 1.0是该协议的一个早期版本,它允许客户端和...

    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-rpc-python

    JSON-RPC(JavaScript Object Notation Remote Procedure Call)是一种轻量级的远程过程调用协议,它使用JSON(JavaScript Object Notation)作为数据交换格式。在Python中,json-rpc-python库提供了一种方便的方式...

    JSON-RPC 2.0 规范(中文版)

    ### JSON-RPC 2.0 规范解析 #### 概述 JSON-RPC 2.0 是一种无状态、轻量级的远程过程调用(RPC)协议,旨在简化跨网络的应用通信流程。该规范定义了一系列数据结构及处理规则,以支持不同消息传输环境(如基于 ...

    使用JSON-RPC

    JSON-RPC(JavaScript Object Notation Remote Procedure Call)是一种轻量级的远程调用协议,它使用JSON(JavaScript Object Notation)作为数据交换格式。在Web服务和分布式系统中,JSON-RPC提供了一种简单的方式...

    json-rpc.jar 和 jsonrpc.js

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

    JSON-RPC for Java使用说明

    JSON-RPC(JavaScript Object Notation Remote Procedure Call)是一种轻量级的远程调用协议,它使用JSON(JavaScript Object Notation)作为数据交换格式。在Java环境中,JSON-RPC允许应用程序通过网络调用其他...

    JSON-RPC-Java实例

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

    JSON-RPC for Java.src 2.0

    JSON-RPC(JavaScript Object Notation Remote Procedure Call)是一种轻量级的远程过程调用协议,常用于客户端-服务器通信,特别是在分布式系统中。它利用JSON(JavaScript Object Notation)作为数据交换格式,...

    JsonRpc.rar_C++ jsonrpc_JSON_JsonRpc.rar_json-rpc _用jsonrpc封装

    JSON-RPC是一种轻量级的远程过程调用(RPC)协议,它使用JSON(JavaScript Object Notation)作为数据交换格式。在C++中实现JSON-RPC可以为软件开发带来诸多便利,例如跨语言通信、简化接口设计等。你提供的"JsonRpc...

    json-rpc-1.0.zip

    JSON-RPC(JavaScript Object Notation Remote Procedure Call)是一种轻量级的远程过程调用协议,常用于客户端和服务器之间的通信。这个"json-rpc-1.0.zip"压缩包包含了一个Java实现的JSON-RPC 1.0版本的库,主要...

    java开发常用jar包之json-rpc.rar

    本压缩包“java开发常用jar包之json-rpc.rar”包含了与JSON-RPC相关的Java库,便于开发者集成到他们的项目中。 一、JSON-RPC协议 1. JSON-RPC简介:JSON-RPC是一种基于JSON的RPC协议,它定义了如何通过HTTP或其他...

Global site tag (gtag.js) - Google Analytics