JSON-RPCを触ってみた。
http://oss.metaparadigm.com/jsonrpc/
から、ダウンロード。
JSON-RPCは、JavaScriptからサーバサイドのJavaオブジェクトをリモート呼び出しするライブラリ。
サーバサイドのJavaオブジェクトを以下のようなJavaScriptのコードから呼び出せる。
var jsonrpc = new JSONRpcClient("/jsonrpc/JSON-RPC"); var result = jsonrpc.hello.sayHello("Hoge");
上記コードでは、サーバのセッションに"hello"
という名前で設定されているオブジェクト*1のsayHello
メソッドを呼び出している。
上記コードを呼び出すための準備は以下のようになる。
まずは、web.xml
で、JSONRPCServlet
を、/JSON-RPC
にマッピングする。
<servlet> <servlet-name>JSONRPCServlet</servlet-name> <servlet-class>com.metaparadigm.jsonrpc.JSONRPCServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>JSONRPCServlet</servlet-name> <url-pattern>/JSON-RPC</url-pattern> </servlet-mapping>
次に、実際に呼び出されるJavaのクラスを用意。
package hoge; public class Hello { public String sayHello(String who) { return "Hello " + who; } }
最後に、上記コードを含んだJSP(hello.jsp)を用意。
<jsp:useBean id="JSONRPCBridge" scope="session" class="com.metaparadigm.jsonrpc.JSONRPCBridge" /> <% JSONRPCBridge.registerObject("hello", new hoge.Hello()); %> <html> <head> <script type="text/javascript" src="jsonrpc.js"></script> </head> <body> <script type="text/javascript"> jsonrpc = new JSONRpcClient("/jsonrpc/JSON-RPC"); var result = jsonrpc.hello.sayHello("Hoge"); document.write(result); </script> </body> </html>
このJSPの要点は以下の3つ。
JSONRPCBridge
を"JSONRPCBridge"
という名前でセッションに設定。JSONRPCBridge
オブジェクトのregisterObject()
でhoge.Hello
オブジェクトを登録。- JSON-RPCで用意されている
jsonrpc.js
を読込。
こいつらを以下の構成でWebアプリとしてまとめて、
/ +--jsonroc.js +--hello.jsp +--WEB-INF/ +--web.xml +--lib/ +--jsonrpc.jar
適当にサーバにデプロイして、hello.jspを呼びせば、画面に"Hello Hoge" と表示される。
割と簡単にサーバサイドと連携できる。
このときのサーバとのやり取りを覗くと、リクエストでは
{"method": "hello.sayHello", "params": ["Hoge"]}
がリクエストボディに設定され、レスポンスボディには以下のテキストが設定されて返されている。
{"result":"Hello Hoge"}
*1:実際はセッションに設定されているJSONRPCBridgeにhelloオブジェクトを登録する。