`
binn.zeng
  • 浏览: 10573 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

全面修改json-rpc-java 让它更河蟹囧

    博客分类:
  • ajax
阅读更多

json-rpc-java最让人郁闷的地方就是把bridge注册到session,当然可以把所有的方法都注册到GlobalBridge,不过这样会有一个问题,就是客户端创建JSONRpcClient的时候listMethod会返回所有的注册方法,一个不觉得,如果东西过多的话也够恐怖的.而且对于应用的前端也与JSONRpcClient死死绑在一起.

有一种办法就是暴露出少量的dispath方法,然后通过反射传入的方法名字传入Map参数来做,但是这样感觉也怪怪的,所以还是用自己的想法来进行改造:客户端不需要new JSONRpcClient,而是通过url的方式来访问暴露的业务组件,如XXXService.xxx.所有的暴露组件注册到GlobalBridge.修改其实就是把它的Servlet改掉就可以了:

public class RpcServlet extends HttpServlet {
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	private final static int buf_size = 4096;

	public void service(HttpServletRequest request, HttpServletResponse response)
			throws IOException, ClassCastException {
		String action = request.getRequestURI().substring(
				request.getServletPath().length()
						+ request.getContextPath().length() + 1);
		JSONRPCBridge json_bridge = JSONRPCBridge.getGlobalBridge();
		response.setContentType("text/plain;charset=utf-8");
		OutputStream out = response.getOutputStream();
		String charset = request.getCharacterEncoding();
		if (charset == null)
			charset = "UTF-8";
		BufferedReader in = new BufferedReader(new InputStreamReader(request
				.getInputStream(), charset));
		CharArrayWriter data = new CharArrayWriter();
		char buf[] = new char[buf_size];
		int ret;
		while ((ret = in.read(buf, 0, buf_size)) != -1)
			data.write(buf, 0, ret);
		
		String json = "{\"method\": \""+action+"\", \"params\": "+data.toString()+"}";
		// Process the request
		JSONObject json_req = null;
		JSONRPCResult json_res = null;
		try {
			json_req = new JSONObject(json);
			json_res = json_bridge.call(new Object[] { request }, json_req);
		} catch (ParseException e) {
			e.printStackTrace();
			json_res = new JSONRPCResult(JSONRPCResult.CODE_ERR_PARSE, null,
					JSONRPCResult.MSG_ERR_PARSE);
		}

		byte[] bout = json_res.toString().getBytes("UTF-8");
		response.setIntHeader("Content-Length", bout.length);

		out.write(bout);
 		out.flush();
		out.close();
	}
}

对比以前的来改非常容易,然后就是构建一个在客户端可用的访问器.

由于应用是结合Ext的,所以用到了它的基本类库(偷懒了-_-)以及jsonrpc js类库中的几个帮助方法,实现同步与异步调用:

JsonRpc = {
	rootUrl : ""
};
JsonRpc.request = function(url, params, callback) {
	if (callback) {
		Ext.Ajax.request({
			url : JsonRpc.rootUrl + url,
			params : toJSON(params),
			method : "POST",
			callback : function(op, success, response) {
				if (success) {
					var o = eval("(" + response.responseText + ")");
					callback(o.result, o.error);
				} else {
					callback(undefined, {
						msg : "failed"
					});
				}
			}
		});
	} else {
		var conn = Ext.lib.Ajax.getConnectionObject().conn;
		conn.open("POST", JsonRpc.rootUrl + url, false);
		conn.send(toJSON(params));
		var o = eval("(" + conn.responseText + ")");
		if (o.error) {
			throw o.error;
		} else {
			return o.result;
		}
	}
};

 同步与异步使用分别是:

//同步
JsonRpc.request("XXXService.xx", [params]);
//异步
var callback = function(result, ex) {
};
JsonRpc.request("XXXService.xx", [params], callback);

 

分享到:
评论

相关推荐

    JSON-RPC-Java实例

    JSON-RPC-Java可运行在Servlet容器中如Tomcat也可以运行在JBoss与其它J2EE应用服务器中因此可以在一个基于JavaScript与DHTML的Web应用程序中利用它来直接调用普通Java方法与EJB方法。我们可以很方便的使用JSON-RPC-...

    JSON-RPC for Java.src 2.0

    2. "JSON-RPC.jar":这是编译后的Java库文件,包含了JSON-RPC for Java的核心组件,可以直接在Java项目中引用以实现JSON-RPC通信。 3. "JsonRpcClient.js":这可能是JavaScript版本的客户端库,用于在浏览器端或Node...

    json-rpc-java-1.0.zip

    本压缩包“json-rpc-java-1.0.zip”包含了JSON-RPC在Java平台上的实现及相关使用示例。 首先,JSON-RPC的基本原理是,客户端通过HTTP请求将一个JSON格式的请求体发送到服务器,请求体包含了要调用的方法名和参数。...

    json-rpc-for-java

    继《JavaScript高级应用与实践》之后推出的json-rpc-for-java开源代码,是仅仅100行的javascript代码和不到10个java文件实现的超级轻量级的通过 javaScript快速调用java对象并返回任意对象的轻量级框架,并且支持...

    android-json-rpc

    总的来说,android-json-rpc是Android开发中的一个强大工具,它极大地简化了JSON-RPC通信的实现,使开发者能更专注于业务逻辑,而不是底层通信细节。通过合理使用这个库,可以构建高效、可靠的Android应用。

    json-rpc.jar 和 jsonrpc.js

    JSON-RPC-Java可运行在Servlet容器中如Tomcat也可以运行在JBoss与其它J2EE应用服务器中因此可以在一个基于JavaScript与DHTML的Web应用程序中利用它来直接调用普通Java方法与EJB方法。我们可以很方便的使用JSON-RPC-...

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

    标签"前端"、"json"、"测试"、"javascript"、"json-rpc"提供了关于该项目的更多线索。这表明它是使用JavaScript编写的,主要用于前端开发,与JSON数据格式紧密相关,而且关注于测试。在实际应用中,前端开发者可能...

    json-rpc-java-1.0源代码

    本项目"json-rpc-java-1.0"提供了JSON-RPC的Java实现,包含`jsonArray`和`jsonObject`等关键组件。 1. JSON基础知识: JSON是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。它的基本...

    JSON-RPC for Java使用说明

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

    JSON-RPC for Java使用说明.doc

    在了解 JSON-RPC for Java 的使用场景后,让我们来了解它的配置和使用方法。JSON-RPC for Java 的配置非常简单,只需要将库添加到项目中,并配置好远程过程调用服务端口即可。使用 JSON-RPC for Java 也非常简单,...

    json-rpc-java-talk-20050225.pdf

    ### JSON-RPC-Java在构建下一代Web应用中的应用 #### 概述 在2005年的演讲中,Michael Clark探讨了如何利用JSON-RPC-Java来构建高度动态的Web应用程序。这一技术允许开发人员通过JavaScript透明地调用远程Java方法...

    Json-RPC for java Example

    json-rpc-for-java,是仅仅不到100行的javascript代码和不到10个java文件实现的超级轻量级的通过 javaScript快速调用java对象并返回任意对象的轻量级框架,并且支持级联调用,也就是说不需要额外 的JavaScript编程,...

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

    JSON-RPC是一种轻量级的远程过程调用(Remote Procedure Call)协议,它使用JSON(JavaScript Object Notation)作为数据交换格式。在Java开发中,JSON-RPC库可以帮助开发者实现客户端和服务端之间的通信,尤其在...

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

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

    JSON-RPC 2.0 规范(中文版)

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

    json-rpc-1.0.zip

    这个"json-rpc-1.0.zip"压缩包包含了一个Java实现的JSON-RPC 1.0版本的库,主要用于在Java应用程序中处理JSON数据并实现远程调用功能。 在Java中,JSON-RPC库允许开发者通过HTTP或WebSocket等协议,将JSON格式的...

    国人写的json-rpc-java的例子及jar包

    "rpc"代表远程过程调用,"java"则明确指出了编程语言,而"json-rpc-java"是这个库的核心主题,表示它是一个基于Java的JSON-RPC实现。 在提供的压缩包文件中,"JsonRpcForJava3.0.rar"可能是JSON-RPC Java库的一个...

    使用JSON-RPC

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

    json-rpc-python

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

Global site tag (gtag.js) - Google Analytics