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可运行在Servlet容器中如Tomcat也可以运行在JBoss与其它J2EE应用服务器中因此可以在一个基于JavaScript与DHTML的Web应用程序中利用它来直接调用普通Java方法与EJB方法。我们可以很方便的使用JSON-RPC-...
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平台上的实现及相关使用示例。 首先,JSON-RPC的基本原理是,客户端通过HTTP请求将一个JSON格式的请求体发送到服务器,请求体包含了要调用的方法名和参数。...
继《JavaScript高级应用与实践》之后推出的json-rpc-for-java开源代码,是仅仅100行的javascript代码和不到10个java文件实现的超级轻量级的通过 javaScript快速调用java对象并返回任意对象的轻量级框架,并且支持...
总的来说,android-json-rpc是Android开发中的一个强大工具,它极大地简化了JSON-RPC通信的实现,使开发者能更专注于业务逻辑,而不是底层通信细节。通过合理使用这个库,可以构建高效、可靠的Android应用。
JSON-RPC-Java可运行在Servlet容器中如Tomcat也可以运行在JBoss与其它J2EE应用服务器中因此可以在一个基于JavaScript与DHTML的Web应用程序中利用它来直接调用普通Java方法与EJB方法。我们可以很方便的使用JSON-RPC-...
标签"前端"、"json"、"测试"、"javascript"、"json-rpc"提供了关于该项目的更多线索。这表明它是使用JavaScript编写的,主要用于前端开发,与JSON数据格式紧密相关,而且关注于测试。在实际应用中,前端开发者可能...
本项目"json-rpc-java-1.0"提供了JSON-RPC的Java实现,包含`jsonArray`和`jsonObject`等关键组件。 1. JSON基础知识: JSON是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。它的基本...
JSON-RPC(JavaScript Object Notation Remote Procedure Call)是一种轻量级的远程调用协议,它使用JSON(JavaScript Object Notation)作为数据交换格式。在Java环境中,JSON-RPC允许应用程序通过网络调用其他...
在了解 JSON-RPC for Java 的使用场景后,让我们来了解它的配置和使用方法。JSON-RPC for Java 的配置非常简单,只需要将库添加到项目中,并配置好远程过程调用服务端口即可。使用 JSON-RPC for Java 也非常简单,...
### JSON-RPC-Java在构建下一代Web应用中的应用 #### 概述 在2005年的演讲中,Michael Clark探讨了如何利用JSON-RPC-Java来构建高度动态的Web应用程序。这一技术允许开发人员通过JavaScript透明地调用远程Java方法...
json-rpc-for-java,是仅仅不到100行的javascript代码和不到10个java文件实现的超级轻量级的通过 javaScript快速调用java对象并返回任意对象的轻量级框架,并且支持级联调用,也就是说不需要额外 的JavaScript编程,...
JSON-RPC是一种轻量级的远程过程调用(Remote Procedure Call)协议,它使用JSON(JavaScript Object Notation)作为数据交换格式。在Java开发中,JSON-RPC库可以帮助开发者实现客户端和服务端之间的通信,尤其在...
JSON-RPC(JavaScript Object Notation Remote Procedure Call)是一种轻量级的远程调用协议,它使用JSON作为数据交换格式。在Java开发中,JSON-RPC框架可以帮助开发者实现客户端与服务器之间的高效通信,常用于...
JSON-RPC(JavaScript Object Notation Remote Procedure Call)是一种轻量级的远程过程调用协议,它使用JSON(JavaScript Object Notation)作为数据交换格式。JSON-RPC 1.0是该协议的一个早期版本,它允许客户端和...
### JSON-RPC 2.0 规范解析 #### 概述 JSON-RPC 2.0 是一种无状态、轻量级的远程过程调用(RPC)协议,旨在简化跨网络的应用通信流程。该规范定义了一系列数据结构及处理规则,以支持不同消息传输环境(如基于 ...
这个"json-rpc-1.0.zip"压缩包包含了一个Java实现的JSON-RPC 1.0版本的库,主要用于在Java应用程序中处理JSON数据并实现远程调用功能。 在Java中,JSON-RPC库允许开发者通过HTTP或WebSocket等协议,将JSON格式的...
"rpc"代表远程过程调用,"java"则明确指出了编程语言,而"json-rpc-java"是这个库的核心主题,表示它是一个基于Java的JSON-RPC实现。 在提供的压缩包文件中,"JsonRpcForJava3.0.rar"可能是JSON-RPC Java库的一个...
JSON-RPC(JavaScript Object Notation Remote Procedure Call)是一种轻量级的远程调用协议,它使用JSON(JavaScript Object Notation)作为数据交换格式。在Web服务和分布式系统中,JSON-RPC提供了一种简单的方式...
JSON-RPC(JavaScript Object Notation Remote Procedure Call)是一种轻量级的远程过程调用协议,它使用JSON(JavaScript Object Notation)作为数据交换格式。在Python中,json-rpc-python库提供了一种方便的方式...