工作中,需要用到JSON RPC,整了個小例子,并將實現過程貼出來,供新學者參考:至于JSON RPC的原理,在網上有很多文章,在此不再多言:
(1)獲得JSON RPC支持,JSON RPC是一個客戶端與服務器異步通訊機制,為實現JSON RPC,先得到JAR包,及其JS文件。也可以導入JSON RPC 源碼到工程中。我在這現這個例子時,是導入了其源碼。
(2)修改web.xml配置,當工程啟動時,服務器加裁json rpc 相應的servlet ,獲得容器支持,加入如下配置:
<!-- 用于JSON RPC -->
<servlet>
<servlet-name>JSONRPCServlet</servlet-name>
<servlet-class>
com.metaparadigm.jsonrpc.JSONRPCServlet
</servlet-class>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>JSONRPCServlet</servlet-name>
<url-pattern>/JSON-RPC</url-pattern>
</servlet-mapping>
(3)創建后臺類文件:此例中用到兩個類 Examle.java,User.java
User.java類,如下:
package test;
import java.io.*;
public class User implements Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
Example.java 類如下:
package test;
import java.io.*;
public class Example implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
public String aboutMe(User user){
String str="您好,我是"+user.getName()+",今年"+user.getAge()+"歲";
return str;
}
public String aboutMe(){
String str="您好,我是張三,今年30歲";
return str;
}
}
(4)創建前臺訪問JSP文件,并編寫相應的JS代碼:jsonrpc.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<jsp:useBean id="JSONRPCBridge" scope="session"
class="com.metaparadigm.jsonrpc.JSONRPCBridge" />
<jsp:useBean id="example" scope="session"
class="test.Example" />
<%
JSONRPCBridge.registerObject("example", example);
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'jsonrpc.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
<script type="text/javascript" src="js/util/jsonrpc.js"></script>
<script type="text/javascript">
<!--jsonrpc 客戶端JS代碼 -->
var jsonrpc=null;
function onLoad(){
jsonrpc=new JSONRpcClient("JSON-RPC");
}
function aboutme_1(){
var str1=jsonrpc.example.aboutMe();
alert(str1);
}
function aboutme_2(name,age){
var user={"javaclass":"test.User","name":name,"age":age};
var str2=jsonrpc.example.aboutMe(user);
alert(str2);
}
</script>
</head>
<body onload="onLoad()">
JSON RPC 測試頁,通過JS異步獲取遠程服務器后臺信息,在IE上顯示。
<br>
<br>
異步調用后臺數據,在前臺顯示
<input type=button id="aboutme_1" value=" show aboutme" onclick="aboutme_1()"><br><br>
通過客戶端傳入的信息,構造一個對象,傳到后臺,再在前臺顯示
<input type=button id="aboutme_2" value=" show aboutme" onclick="aboutme_2('李四','32')">
</body>
</html>
在JSP頁面文件中,有幾點,本人以為是比較重要的:
(1)通過useBean,載入JSONRPCBridge實例,并用同樣的方式,載入業務處理類實例example.
<jsp:useBean id="JSONRPCBridge" scope="session"
class="com.metaparadigm.jsonrpc.JSONRPCBridge" />
<jsp:useBean id="example" scope="session"
class="test.Example" />
(2)將前面加裁的example注冊到JSONRPCBridge
<%
JSONRPCBridge.registerObject("example", example);
%>
(3)引入Jsonrpc 的js <script type="text/javascript" src="js/util/jsonrpc.js"></script>
(4)在頁面加載時new一個JSON RPC 客戶端,這一步不可少
var jsonrpc=new JSONRpcClient("JSON-RPC");
(5)以上準備好后,在客戶端就可以與服務器進行異步通訊了