JSON-RPC-Java

添加评论 38 views 2010年3月15日

以前为了在前台完成JavaScript对后天代码的调用,用的是DWR框架,今天发现使用JSON-RPC-Java也可以实现DWR所实现的功能。
JSON-RPC-Java是一个用Java来实现动态JSON-RPC的框架. 利用它内置的一个轻级量JSON-RPC JavaScripIt客户端,可以让你透明地在JavaScript中调用Java代码。JSON-RPC-Java可运行在Servlet容器中如 Tomcat也可以运行在JBoss与其它J2EE应用服务器中因此可以在一个基于JavaScript与DHTML的Web应用程序中利用它来直接调用普通Java方法与EJB方法。

与DWR类似的是,JSON-RPC-Java可将Java方法暴露给JavaScript客户端,允许从JavaScript客户端直接调用远程 Java方法。暴露都是通过将Java对象注册成客户端的JavaScript对象来实现的,只是注册过程略有区别。一旦将远程对象转换成对应的 JavaScript对象,便可以通过回调函数调用服务器的Java方法。

JSON-RPC-Java暴露远程Java对象依赖于 JSONRPCBridge和JSONRPCServlet。其中,JSONRPCServlet负责拦截用户请求,JSONRPCBridge负责将拦截到的用户请求转发给用户的处理类。JSONRPCServlet是一个有特殊功能的拦截器,JSONRPCBridge是客户端JavaScript对象和Java对象之间的桥梁。

为了暴露服务器端的Java对象,应该在web.xml中定义 JSONRPCServlet,该Servlet负责拦截用户请求,即应该在web.xml文件增加如下的配置片段:
<!– 在web.xml定义JSONRPCServlet –>
<servlet>
<!– 指定核心Servlet的名字 –>
<servlet-name>jsonServlet</servlet-name>
<!– 指定核心Servlet的实现类 –>
<servlet-class>com.metaparadigm.jsonrpc.JSONRPCServlet</servlet-class>
</servlet>
<servlet-mapping>
<!– 指定核心Servlet的名字 –>
<servlet-name>jsonServlet</servlet-name>
<!– 指定核心Servlet映射的URL –>
<url-pattern>/JSON-RPC</url-pattern>
</servlet-mapping>

一旦完成了上面的映射,便表示所有向/myjson地址的请求都将发给JSONRPCServlet处理。因此,JSON-RPC-Java框架中的另一个核心类JSONRpcClient应以此URL创建实例。

JSONRpcClient是JSON-RPC-Java框架的另一个核心类,它用于创建一个JavaScript对象,该对象里有所有被导出到客户端 JavaScript的对象。创建方法:
var jsonrpc = new JSONRpcClient(“JSON-RPC”);

完成了JSONRpcClient的初始化后,还必须将远程 Java对象注册在该对象下。为了注册该对象,在JSP页面中使用如下代码片段:
<!– 初始化JSONRPCBridge对象 ,此处在session作用域中放入一个名为”JSONRPCBridge”的”com.metaparadigm.jsonrpc.JSONRPCBridge”对象,要注意的是名字一定要为”JSONRPCBridge”,否可能出错! –>
<jsp:useBean id=”JSONRPCBridge” scope=”session” />
<!– 初始化AlbumService对象 –>
<jsp:useBean id=”javachen” scope=”session”/>
<%
//注册 AlbumService对象,将其转换为一个客户端JavaScript的一个as对象
JSONRPCBridge.registerObject(“javachen”, javachen);
%>

完成这种注册后,AlbumService对象将被暴露成一个 JavaScript对象,这个对象作为JSONRpcClient对象的一个属性引用。因此,为了调用AlbumService对象的方法,可以通过如下代码来引用AlbumService对象:
jsonrpc.javachen   //jsonrpc是 JSONRpcClient对象的名字,而as是AlbumService的对象

现在假设com.javachen.service.AlbumService类里有个sayHello方法,则用JavaScript调用sayHello方法如下:
function sayHello() {
var who = document.getElementById(“hello”);
var result = jsonrpc.javachen.sayHello(callback, who.value);
}
function callback(result, exception) {
if (exception == null) {
document.getElementById(“say”).innerHTML = “<em> 操作提示:提交一个字符串并返回.</em><h2>” + result + “</h2><hr/>”;
} else {
alert(exception.message);
}
}
callback函数是一个回调函数,用于执行异步调用,该回调函数将在服务器响应完成后自动运行,其包括两个参数result(返回结果), exception(函数抛出的异常).

JSON-RPC-Java示例代码下载:纳米盘下载

  1. 2010年3月20日 at 15:51 | #1

    发现我们学习的内容很一致啊,公司前段时间一个项目也用到DWR了

  2. 2010年3月20日 at 15:52 | #2

    建议加一个代码高亮啊

  3. 2010年3月20日 at 23:02 | #3

    @alswl,
    嗯,我会加上的

  4. 2010年3月20日 at 23:02 | #4

    @alswl,
    dwr很不错,与spring结合更有效

  5. 2010年4月19日 at 12:08 | #5

    嗯,像dwr这种前后台直接交互的技术在很多公司使用着了

  1. 还没有 trackbacks
订阅评论