1、首先配置web.xml加入JSON-RPC的servlet监听:
<servlet> <servlet-name>JSONRPCServlet</servlet-name> <servlet-class> jcore.jsonrpc.servlet.JSONRPCServlet </servlet-class> <load-on-startup>2</load-on-startup> </servlet> <servlet-mapping> <servlet-name>JSONRPCServlet</servlet-name> <url-pattern>/JRPC</url-pattern> </servlet-mapping>
注:如果项目中使用了Sturts2,则需要令配置一个filter来让servlet生效
2、将JSON-RPC.jar加入项目中
3、创建需要使用JSON-RPC远程调用的java类
package jcore.jsonrpc.rpcobj; import java.io.Serializable; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import jcore.jsonrpc.common.JsonRpcObject; public class MyTestJsonRPC extends JsonRpcObject implements Serializable { //注:需要继承JsonRpcObject类,且实现序列化接口
private List myList = new ArrayList(); private Map map = new HashMap(); public MyTestJsonRPC() { myList.add("good"); //myList.add(new TestDomain()); // map中也可以放入复合对象 map.put("first", "第一条值"); map.put("p2", new Date()); //map.put("domain", myList.get(1)); } /*** * 返回Map对象 * @return */ public Map getMap() { return map; } /*** * 获取一个普通对象 * @return */ public Object getStr() { return myList.get(0); } /*** * 获取一个复合对象 * @return */ public Object getMyObj() { return myList.get(1); } /*** * 获取List对象 * @return */ public List getList() { return myList; } }
4、将JsonRpcClient.js文件加入项目中(WEB页面需要引入该JS)
5、前台页面使用JSON-RPC远程调用Java对象
在需要远程调用的前台页面代码中增加如下内容:
5.1 jsp中注册需要远程调用的java对象
<% jcore.jsonrpc.common.JsonRpcRegister.registerObject(request, "myTestJsonRPC", jcore.jsonrpc.rpcobj.MyTestJsonRPC.class); %>
<script charset="UTF-8" type="text/JavaScript" > var contextPath="<%=path%>";// 关键的地方 </script> <script charset="UTF-8" type="text/javascript" src="<%=basePath%>JsonRpcClient.js"> </script>
<% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %>
<script charset="UTF-8" type="text/JavaScript" > //fnGetRpc("MyTestJsonRPC"); var myrpc = rpc.myTestJsonRPC; var obj=myrpc.getStr(); alert(obj); </script>