1、简介
JSON-RPC-Java是一个用Java来实现动态JSON-RPC的框架。 利用它内置的一个轻级量JSON-RPC JavaScripIt客户端,可以让你透明地在JavaScript中调用Java代码。
2、实例
一、下载JSON-RPC包并解压
http://oss.metaparadigm.com/jsonrpc-dist/json-rpc-java-1.0.1.zip
二、将jsonrpc.js文件拷贝到项目WebRoot下任意目录,将jsonrpc jar包拷贝到项目的WEB-INF/lib目录下
三、web.xml文件
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.5" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <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> </web-app>
四、新建一jsp文件jsonRpc.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <jsp:useBean id="JSONRPCBridge" scope="session" class="com.metaparadigm.jsonrpc.JSONRPCBridge"/> <jsp:useBean id="userService" scope="request" class="jp.com.syspro.service.UserService"/> <% JSONRPCBridge.registerObject("userService",userService); %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <script type="text/javascript" src="script/jsonrpc.js"></script> <script type="text/javascript" src="script/show.js"></script> <link rel="stylesheet" type="text/css" href="css/style.css"> <title>JSONRPC+JSON+Java</title> </head> <body> <fieldset> <legend>查询用户</legend> <input type="text" name="userId"> <input type="button" value="search" onClick="search()"> <select id="userList"></select> </fieldset> <table id="userTable" summary="user table"> <caption>用户列表</caption> <tbody> <tr> <th>编号</th> <th>姓名</th> <th>性别</th> <th>年龄</th> <th>生日</th> <th>电话</th> <th>地址</th> </tr> </tbody> </table> </body> </html>
五、新建一JavaScript文件show.js
// 定义一个JSONRPC对象 var jsonrpc; window.onload=function(){ jsonrpc=new JSONRpcClient("JSON-RPC"); } // 事件处理函数 function search(){ var userId=document.getElementsByName("userId")[0].value; if(userId==null||userId==""){ jsonrpc.userService.getNameList(showList); jsonrpc.userService.getNameSet(showSet); jsonrpc.userService.getNameMap(showMap); }else{ jsonrpc.userService.getNameById(showName,userId); jsonrpc.userService.getUserById(showUser,userId); } } // 定义一个User类 function User(name,gender,age,phone,address,email){ this.name=name; this.gender=gender; this.age=age; this.phone=phone; this.address=address; this.email=email; } // 返回List处理 function showList(result,exception){ if(exception==null){ if(result!=null){ var list=result.list; var user=new User(); for(var i in list){ user.name=list[i]; update(user); } }else{ alert("no result"); } }else{ alert(exception.message); } } // 返回Set处理 function showSet(result,exception){ if(exception==null){ if(result!=null){ var set=result.set; var user=new User(); for(var value in set){ user.name=value; update(user); } }else{ alert("no result"); } }else{ alert(exception.message); } } // 返回Map处理 function showMap(result,exception){ if(exception==null){ if(result!=null){ var map=result.map; for(var key in map){ fill(key,map[key]); } }else{ alert("no result"); } }else{ alert(exception.message); } } // 返回String处理 function showName(name,exception){ if(exception==null){ if(name!=null&&name!=""){ var user=new User(); user.name=name; update(user); }else{ alert("no result"); } }else{ alert(exception.message); } } // 返回JavaBean处理 function showUser(user,exception){ if(exception==null){ if(user!=null){ update(user); }else{ alert("no result"); } }else{ alert(exception.message); } } // 更新表格 function update(user){ var table=document.getElementById("userTable"); // 在表格末尾插入一行 table.insertRow(-1); // 获取当前表格的行数 var rows=table.rows.length; // 在插入的一行插入7列 table.rows[rows-1].insertCell(-1); table.rows[rows-1].insertCell(-1); table.rows[rows-1].insertCell(-1); table.rows[rows-1].insertCell(-1); table.rows[rows-1].insertCell(-1); table.rows[rows-1].insertCell(-1); table.rows[rows-1].insertCell(-1); // 填充数据 table.rows[rows-1].cells[0].innerHTML=rows-1; if(user.name!=undefined){ table.rows[rows-1].cells[1].innerHTML=user.name; } if(user.gender!=undefined){ table.rows[rows-1].cells[2].innerHTML=user.gender; } if(user.age!=undefined){ table.rows[rows-1].cells[3].innerHTML=user.age; } if(user.birthday!=undefined){ table.rows[rows-1].cells[4].innerHTML=user.birthday; } if(user.phone!=undefined){ table.rows[rows-1].cells[5].innerHTML=user.phone; } if(user.address!=undefined){ table.rows[rows-1].cells[6].innerHTML=user.address; } } // 填充下拉列表 function fill(userName,userId){ var userList=document.getElementById("userList"); var option=document.createElement("option"); option.text=userName; option.value=userId; for(var i=0;i<userList.options.length;i++){ // 如果有重复数据则返回 if(userList.options[i].value==option.value){ return; } } // 添加到下拉列表 userList.options.add(option); }
六、新建一Java文件UserService
package jp.com.syspro.service; import java.io.Serializable; import java.util.List; import java.util.Map; import java.util.Set; import jp.com.syspro.bean.UserBean; import jp.com.syspro.dao.UserDao; public class UserService implements Serializable{ private static final long serialVersionUID = 1L; private UserDao userDao; public String getNameById(String id){ userDao=new UserDao(); String name=userDao.getNameById(id); return name; } public List<String> getNameList(){ userDao=new UserDao(); List<String> list=userDao.getNameList(); return list; } public Set<String> getNameSet(){ userDao=new UserDao(); Set<String> set=userDao.getNameSet(); return set; } public Map<String,String> getNameMap(){ userDao=new UserDao(); Map<String,String> map=userDao.getNameMap(); return map; } public UserBean getUserById(String id){ userDao=new UserDao(); UserBean user=userDao.getUserById(id); return user; } }
注意:
1、UserBean里面的非基本类型数据的变量的值必须为空。
2、调用后台方法时,参数不能为数组。