工作中,需要用到JSON RPC,整了個(gè)小例子,并將實(shí)現(xiàn)過(guò)程貼出來(lái),供新學(xué)者參考:至于JSON RPC的原理,在網(wǎng)上有很多文章,在此不再多言:
(1)獲得JSON RPC支持,JSON RPC是一個(gè)客戶端與服務(wù)器異步通訊機(jī)制,為實(shí)現(xiàn)JSON RPC,先得到JAR包,及其JS文件。也可以導(dǎo)入JSON RPC 源碼到工程中。我在這現(xiàn)這個(gè)例子時(shí),是導(dǎo)入了其源碼。
(2)修改web.xml配置,當(dāng)工程啟動(dòng)時(shí),服務(wù)器加裁json rpc 相應(yīng)的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)創(chuàng)建后臺(tái)類(lèi)文件:此例中用到兩個(gè)類(lèi) Examle.java,User.java
User.java類(lèi),如下:
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 類(lèi)如下:
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)創(chuàng)建前臺(tái)訪問(wèn)JSP文件,并編寫(xiě)相應(yīng)的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 測(cè)試頁(yè),通過(guò)JS異步獲取遠(yuǎn)程服務(wù)器后臺(tái)信息,在IE上顯示。
<br>
<br>
異步調(diào)用后臺(tái)數(shù)據(jù),在前臺(tái)顯示
<input type=button id="aboutme_1" value=" show aboutme" onclick="aboutme_1()"><br><br>
通過(guò)客戶端傳入的信息,構(gòu)造一個(gè)對(duì)象,傳到后臺(tái),再在前臺(tái)顯示
<input type=button id="aboutme_2" value=" show aboutme" onclick="aboutme_2('李四','32')">
</body>
</html>
在JSP頁(yè)面文件中,有幾點(diǎn),本人以為是比較重要的:
(1)通過(guò)useBean,載入JSONRPCBridge實(shí)例,并用同樣的方式,載入業(yè)務(wù)處理類(lèi)實(shí)例example.
<jsp:useBean id="JSONRPCBridge" scope="session"
class="com.metaparadigm.jsonrpc.JSONRPCBridge" />
<jsp:useBean id="example" scope="session"
class="test.Example" />
(2)將前面加裁的example注冊(cè)到JSONRPCBridge
<%
JSONRPCBridge.registerObject("example", example);
%>
(3)引入Jsonrpc 的js <script type="text/javascript" src="js/util/jsonrpc.js"></script>
(4)在頁(yè)面加載時(shí)new一個(gè)JSON RPC 客戶端,這一步不可少
var jsonrpc=new JSONRpcClient("JSON-RPC");
(5)以上準(zhǔn)備好后,在客戶端就可以與服務(wù)器進(jìn)行異步通訊了