最近在自己的一个小项目中使用了ext+jsonrpc直接调用后台暴露的业务逻辑接口方式,在使用的过程中遇到了不少问题,在这里和大家分享一下:)
最初在整合jsonrpc的时候遇到个问题,就是它的bridge是和session绑定的,很讨厌这种方式,得要在每个jsp中写那恶心的标签.后来自己找找,发现有个getGlobalBridge可以获取全局bridge,然后自己写了个小工具,让其可以把spring中的业务逻辑bean通过配置文件直接暴露出去.
/**
* 映射JSONBridge与Spring所管理的对象.
*
* @version 2008.07.04
* @author bin
*/
public class JSONRPCSpringMappingListener implements ServletContextListener {
/** 全局资源文件属性名 */
private static String CONFIGNAME = "JSONRPCSpringMappingConfig";
public void contextDestroyed(ServletContextEvent sce) {
}
public void contextInitialized(ServletContextEvent sce) {
Properties properties = new Properties();
WebApplicationContext context = WebApplicationContextUtils
.getWebApplicationContext(sce.getServletContext());
JSONRPCBridge bridge = JSONRPCBridge.getGlobalBridge();
// 读取资源文件
for (String propFile : sce.getServletContext().getInitParameter(
CONFIGNAME).split(";")) {
try {
if (propFile.startsWith("classpath:")) {
properties.load(new BufferedInputStream(
new FileInputStream(new File(sce
.getServletContext().getRealPath(
"/WEB-INF/classes/")
+ "/" + propFile.substring(10)))));
} else {
properties.load(new BufferedInputStream(
new FileInputStream(new File(sce
.getServletContext().getRealPath("/")
+ propFile))));
}
} catch (IOException e) {
e.printStackTrace();
}
}
// 分析资源文件,注册到全局bridge
for (Object key : properties.keySet()) {
String[] values = properties.getProperty(key.toString()).split(",");
if (values.length > 1) {
try {
bridge.registerObject(key, context.getBean(values[0]),
Class.forName(values[1]));
} catch (BeansException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
} else {
bridge.registerObject(key, context.getBean(values[0]));
}
}
}
}
这样我就可以在一个属性文件中编辑我要暴露的业务逻辑bean名字以及我需要暴露的接口了.
接下来在面对store的时候发现没有提供用方法提供数据的store于是自己又写了一小小的自定义store:
RpcStore = function(c) {
RpcStore.superclass.constructor.call(this, Ext.apply(c, {
proxy : new RpcProxy({
rpcfn : c.rpcfn
}),
reader : new Ext.data.JsonReader(c, c.fields)
}));
};
Ext.extend(RpcStore, Ext.data.Store);
RpcProxy = function(c) {
RpcProxy.superclass.constructor.call(this);
this.rpcfn = c.rpcfn;
};
Ext.extend(RpcProxy, Ext.data.DataProxy, {
load : function(params, reader, callback, scope, arg) {
// params = params || {};
var result;
try {
if (Utils.hasProperty(params)) {
result = reader.readRecords(this.rpcfn(params));
}else{
result = reader.readRecords(this.rpcfn());
}
} catch (e) {
this.fireEvent("loadexception", this, arg, null, e);
callback.call(scope, null, arg, false);
return;
}
callback.call(scope, result, arg, true);
}
});
Utils = {};
Utils.hasProperty = function(o){
for(var p in o){
return true;
}
return false;
}
这样我在使用后台数据的时候只需要
store = new RpcStore({
rpcfn : jsonrpc.somebean.somemethod,
fields : ["somefield"]
});
store.load({params:{something:"something"}});
分享到:
相关推荐
JsonRPC, 简单的Json RPC PHP客户机/服务器只 JsonRPC PHP客户端和服务器一个简单的json rpc客户机/服务器。 特性仅限 json rpc 2.0服务器支持批处理请求和通知基于身份验证和IP的客户端限制自定义中间件完全单元...
标签"前端"、"json"、"测试"、"javascript"、"json-rpc"提供了关于该项目的更多线索。这表明它是使用JavaScript编写的,主要用于前端开发,与JSON数据格式紧密相关,而且关注于测试。在实际应用中,前端开发者可能...
1. **库文件(Library)**: 实现了JSON-RPC 1.0协议的解析、序列化以及与网络通信相关的函数。 2. **示例服务器(Example Server)**: 展示如何使用库来创建一个基本的JSON-RPC服务端,可能包括处理请求、注册处理...
JsonRPC 2.0 Client and Server ============================= 轻量级 Json-RPC 2.0 客户端和服务端的php扩展,基于 multi_curl epoll的并发客户端,依据[jsonrpc](http://www.jsonrpc.org/)协议规范。 ...
<artifactId>jsonrpc4j <version>1.5.0 <groupId>javax.portlet <artifactId>portlet-api <version>2.0 Service代码: @JsonRpcService("/member") public interface MemberService { ... } 因为是基于...
在这个场景中,我们将讨论如何将JSONRPC4J与Spring框架和Maven构建工具整合,以创建一个高效、灵活的远程服务调用系统。 1. **JSONRPC4J简介** JSONRPC4J提供了简单的方式来实现JSON-RPC规范,该规范定义了客户端...
微信应用库可能包含了一系列与微信API交互的接口,而Test-Jsonrpc可以用来验证这些接口是否按规范工作。在解压并导入项目后,开发者需要按照文档或者示例来配置测试用例,然后运行测试以确保微信API的JSON-RPC实现...
关于JSONRPC的扩展,还可以探讨如何与HTTP协议结合,使用HTTP作为传输层,例如通过POST请求发送JSONRPC请求。此外,可以集成到Spring框架中,利用Spring的依赖注入和AOP特性,简化服务的注册和调用。 在实际应用中...
在实际开发中,`jsonrpc-1.0.jar` 可能会与其他Java库结合使用,例如HTTP客户端库(如Apache HttpClient)来处理HTTP通信,或者与JSON库(如Jackson或Gson)集成,以便于JSON对象的序列化和反序列化。 总的来说,`...
JSONRPC(JSON Remote Procedure Call)是一种轻量级的远程过程调用协议,它使用JSON(JavaScript Object Notation)作为数据交换格式。在JAVA WEB开发中,JSONRPC常被用来实现客户端和服务端之间的通信,尤其在...
JSON-RPC 是一种轻量级的远程过程调用(Remote Procedure Call)协议,它使用 JSON 格式作为数据交换格式,使得客户端与服务器之间的通信更加简单、高效。在 Web 开发中,AJAX (Asynchronous JavaScript and XML) ...
这些库提供了方便的API,用于序列化和反序列化C++对象到JSON格式,便于与JSON-RPC通信。 3. **JSON-RPC封装**: 你提到的"JsonRpc"可能是你自己编写的C++库,用于封装JSON-RPC通信过程。这样的封装可能包括以下几...
jsonrpc所需要的jar包,包括jackson-annotations-2.3.0.jar,jackson-core-2.5.4.jar,jackson-databind-2.6.2.jar,jsonrpc4j-1.0.jar
2. **Laravel 与 JSON-RPC 结合**:Laravel 提供了丰富的中间件和路由系统,可以轻松实现 JSON-RPC 服务器。通过定义 JSON-RPC 路由并创建对应的控制器方法,可以将 JSON-RPC 请求映射到 Laravel 应用的业务逻辑。 ...
这使得与JSON-RPC交互变得简单,无需手动进行类型转换。 使用JSONRPC4J时,开发者需要注意的是,由于JSON-RPC协议的特性,远程调用可能会面临延迟、网络中断等问题。因此,在设计系统时,需要考虑到这些因素,如...
当我们将Jsonrpc4j与Spring结合使用时,我们可以利用Spring的自动化配置能力来简化Jsonrpc4j的集成过程,从而更高效地构建分布式系统。 首先,让我们深入理解Jsonrpc4j的核心概念。JSON-RPC是一种轻量级的远程调用...
非常适合java springboot好用的jsonrpc服务。 客户端调用: Content-Type:application/json {"id":"1","jsonrpc":"2.0","method":"multiplier","params":[5,8]} 服务端返回:{ "jsonrpc": "2.0", "id": "1", ...
scrapy-jsonrpc, Scrapy对使用 JSON RPC控制spider的扩展 爬虫 jsonrpcScrapy jsonrpc是一个扩展,通过 json rpc控制一个正在运行的爬虫网络爬虫。 服务通过协议提供对Crawler对象的访问。安装使用 pip 安装 scrapy-...
在本文中,我们将深入探讨如何使用Go语言和jsonrpc库来构建一个基于Websocket的客户端,以便与服务端进行交互并处理接收到的通知消息。首先,让我们了解这些关键概念: 1. **Go语言(Golang)**:由Google开发的...
jsonrpc4j-1.0.jar jsonrpc