您的位置:首页 > 编程语言 > Java开发

JSON-RPC-Java 指南

2013-11-27 09:23 477 查看
第一次翻译E文, 请指点.
原文:
http://oss.metaparadigm.com/jsonrpc-cvs/tutorial.html

本指南简单地介绍一下如何利用 Ant 生成 JSON-RPC-Java, 然后, 介绍如何在你的 Web 项目中通过 JSON-RPC-Java 和 浏览器端引入的 JSON-RPC 的 javascript 来调用 Java 服务器端应用程序发布的对象方法.

需求:

ant 1.6 或 更高的版本(用来生成JSON-RPC-Java)
Java Servlet 容器(比如: Apache Tomcat, JBoss)

生成包:

在解压下载下来的 JSON-RPC-Java 发布包后, 到解压目录下找到 build.xml, 并且修改 "tomcat" 属性修改成如下:
<property name="tomcat" location="/opt/jakarta-tomcat-5.5.7"/>

然后, 就在该目录下运行 Ant 来生成 jsonrpc.jar, 如下:
../opt/jakarta-tomcat-5.5.7> ant

生成的这个 jsonrpc.jar 包就包含了用来接收客户端的 JSON-RPC 请求的 JSONRPCServlet 和用来解码和分派请求到你的 Java 代码的
JSONRPCBridge bean,
( JSONRPCBridge bean 需要在你的 JSP 或 Servlet 中创建).

生成 Demos:

运行如下命令生成 JSON-RPC-Java 的 demo, 生成的包名为jsonrpc.war:
../opt/jakarta-tomcat-5.5.7> ant test.dist

如果是要直接安装 demo 到 tomcat 应用目录下, 运行如下命令:
../opt/jakarta-tomcat-5.5.7> ant install

打开浏览器出入 http://localhost:8080/jsonrpc/ 开始体验吧!

JSONRPCServlet:

这个 Servlet 相当于 JSON-RPC-Java 应用的传送器, 它处理到服务端的 JSON-RPC (也是通过 HTTP 请求)并且将请求分发到我们在 HttpSession 中注册的 JSONRPCBridge 对象实例.

配置JSONRPCServlet:

在 web.xml 中增加如下的配置段(标为蓝色的):
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"

"http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>
...

<servlet>

<servlet-name>com.metaparadigm.jsonrpc.JSONRPCServlet</servlet-name>

<servlet-class>com.metaparadigm.jsonrpc.JSONRPCServlet</servlet-class>

</servlet>

<servlet-mapping>

<servlet-name>com.metaparadigm.jsonrpc.JSONRPCServlet</servlet-name>

<url-pattern>/JSON-RPC</url-pattern>

</servlet-mapping>
...

</web-app>

JSONRPCBridge:

这个 bena 持有"输出对象"列表并将请求解码以调用这些对象的方法.

JSONRPCBridge 实例只要在 HttpSession 中注册为 "JSONRPCBridge" 属性, JSONRPCServlet 就可以定位到它同时调用它了.

也可以注册特殊的 JSONRPCBridge 来提高应用的安全性(只允许特定的用户特定的"输出对象"的特定方法), 这样你就可以在用户通过了你的应用的验证后才允许他访问你的"输出对象"的方法.(请参考此

手册 ).

在 JSP 中使用的 JSONRPCBridge:

创建实例:
...

<jsp:useBean id="JSONRPCBridge" scope="session"

class="com.metaparadigm.jsonrpc.JSONRPCBridge" />

...

注册"输出对象"
...

<% JSONRPCBridge.registerObject("myTestObject", aTestObject); %>

...

应用 javascript 脚本
...

<script type="text/javascript" src="jsonrpc.js">

<script type="text/javascript" src="myapp.js">

...

这样我们就使得注册为 "myTestObject" 的 aTestObject 对象的所有方法都可以被浏览器端访问了, 参考
hello.jsp .

在 Servlet 中使用的 JSONRPCBridge:

创建实例:
...

// Find the JSONRPCBridge for this session or create one

// if it doesn't exist. Note the bridge must be named "JSONRPCBridge"

// in the HttpSession for the JSONRPCServlet to find it.

HttpSession session = request.getSession();

JSONRPCBridge json_bridge = null;

json_bridge = (JSONRPCBridge) session.getAttribute("JSONRPCBridge");

if(json_bridge == null) {

json_bridge = new JSONRPCBridge();

session.setAttribute("JSONRPCBridge", json_bridge);

}

...

注册"输出对象"
...

json_bridge.registerObject("myTestObject", aTestObject);

...

应用 javascript 脚本
...

out.println("<script type=\"text/javascript\" src=\"jsonrpc.js\"></script>");

out.println("<script type=\"text/javascript\" src=\"myapp.js\"></script>");

...

范例:

onLoad = function()
{
try {
jsonrpc = new JSONRpcClient("/<your webapp name here>/JSON-RPC");
// Call a Java method on the server
var result = jsonrpc.myTestObject.myFunction("hello");
alert(result);
} catch(e) {
alert(e);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: