最近学习了一下phprpc。现讲学习经历和部分代码写下来
1.下载
去http://www.phprpc.org/zh_CN/download/ 下载phprpc_3.0.2_java.zip
解压压缩包,执行make.bat 当前文件夹会生成phprpc.jar,phprpc_client.jar,
phprpc_spring.jar 这3个JAR
2.ECLIPSE 建立WEB工程
将3个JAR复制到LIB包中
3.编写代码
服务端
调用接口IBasic.java
package com.phprpc;
import java.util.List;
import java.util.Map;
/***********************************************************************
*
* IBasic.java
* @copyright Copyright: 2009-2012
* @creator 周辉<br/>
* @create-time May 21, 2009 3:38:06 PM
* @revision $Id: *
***********************************************************************/
public interface IBasic {
/**
* 测试字符串
* @return
*/
public String hello();
/**
* 取一辆汽车 测试对象传递
* @return
*/
public Car getCar();
/**
* 取得list 数据
* @return
*/
public List<String> getList();
/**
* 取得map 数据
* @return
*/
public Map<String,String> getMap();
/**
* 保存数据
* @param map
*/
public void setMap(Map<String,Car> map);
/**
* 保存数据
*
* @param List
*/
public void setList(List<Car> list);
}
接口的实现类 BasicService.java
package com.phprpc;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/*******************************************************************************
*
* BasicService.java
*
* @copyright Copyright: 2009-2012
* @creator 周辉<br/>
* @create-time May 21, 2009 3:39:21 PM
* @revision $Id: *
******************************************************************************/
public class BasicService implements IBasic {
/**
* 取一辆汽车 测试对象传递
*
* @return
*/
public Car getCar() {
Car car = new Car();
car.setColor("RED红色");
car.setLength("2400");
car.setName("HAHACHE");
return car;
}
/**
* 测试字符串
*
* @return
*/
public String hello() {
return "hello zhouhui";
}
/**
* 取得list 数据
*
* @return
*/
public List<String> getList() {
List<String> list = new ArrayList<String>();
list.add("1");
list.add("2");
list.add("3");
return list;
}
/**
* 取得map 数据
*
* @return
*/
public Map<String, String> getMap() {
Map<String, String> map = new HashMap<String, String>();
if (map.isEmpty()) {
map.put("1", "zhouhui1");
map.put("2", "zhouhui2");
map.put("3", "zhouhui3");
}
return map;
}
/**
* 保存数据
*
* @param map
*/
public void setMap(Map<String, Car> map) {
for (Map.Entry<String, Car> item : map.entrySet()) {
System.out.println("mapkey: " + item.getKey());
System.out.println("mapvalue: " + item.getValue().getColor());
System.out.println("mapvalue: " + item.getValue().getName());
}
}
/**
* 保存数据
*
* @param List
*/
public void setList(List<Car> list) {
for (Car s :list){
System.out.println("Color: " + s.getColor());
System.out.println("Length: " + s.getLength());
System.out.println("Name: " + s.getName());
}
}
}
传递客户端和服务器端自定义对象Car.java
package com.phprpc;
import java.io.Serializable;
/***********************************************************************
*
* Car.java
* @copyright Copyright: 2009-2012
* @creator 周辉<br/>
* @create-time May 21, 2009 3:38:21 PM
* @revision $Id: *
***********************************************************************/
public class Car implements Serializable {
private String color;
private String length;
private String name;
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public String getLength() {
return length;
}
public void setLength(String length) {
this.length = length;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
服务器发布代码,PHPRPC 很奇怪服务端代码是个JSP 当然也可以编写一个serverlet
下面将jsp 代码贴上 index2.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ page import="com.phprpc.*" %>
<%@ page import="org.phprpc.*" %>
<%
IBasic hello = new BasicService();
PHPRPC_Server phprpc_server = new PHPRPC_Server();
phprpc_server.add("hello",hello);
phprpc_server.add("getCar",hello);
phprpc_server.add("getList",hello);
phprpc_server.add("getMap",hello);
phprpc_server.add("setMap",hello);
phprpc_server.add("setList",hello);
phprpc_server.start(request, response);
%>
客户端测试代码 testClient.java
package com.phprpc;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.phprpc.PHPRPC_Client;
/***********************************************************************
*
* testClient.java
* @copyright Copyright: 2009-2012
* @creator 周辉<br/>
* @create-time Mar 31, 2009 3:15:08 PM
* @revision $Id: *
***********************************************************************/
public class testClient {
/**
* @param args
*/
public static void main(String[] args) {
PHPRPC_Client client = new PHPRPC_Client("http://localhost:8083/testPhPRpc/index2.jsp");
IBasic basic = (IBasic) client.useService(IBasic.class);
Car car = basic.getCar();
// 客户端调用服务端list 数据
// List<String> list =basic.getList();
// for (String s :list){
// System.out.println("list: " + s);
// }
System.out.println("Hello: " + basic.hello());
System.out.println("Hello: " + car.getName());
//// // 客户端调用服务端MAP 数据
// Map<String,String> map =basic.getMap();
// for(Map.Entry<String,String> item:map.entrySet()){
// System.out.println("mapkey: " +item.getKey());
// System.out.println("mapvalue: " +item.getValue());
// }
// 客户端向服务端发送数据
Map<String,Car> map2 = new HashMap<String,Car>();
if(map2.isEmpty()){
Car c = new Car();
c.setColor("red");
c.setLength("111");
c.setName("zhouhui");
map2.put("1", c);
map2.put("2", c);
map2.put("3", c);
}
basic.setMap(map2);
//客户端向服务端发送数据 list
List<Car> List = new ArrayList<Car>();
for (int i=0;i<3;i++){
Car c = new Car();
c.setColor("red");
c.setLength(String.valueOf(i));
c.setName("zhouhui");
List.add(c);
}
basic.setList(List);
}
}
4.发布程序测试
直接发布WEB功能到TOMCAT 中.WEB.xml也不需要修改了(因为用JSP 做发布服务每有写serverlet)
5.测试结果
客户端发送数据 服务端接收到数据
6.后续
在测试代码中客户端调用服务端list 数据和客户端调用服务端MAP 数据 测试会不成功
PHPrcp 序列化字节数组不识别list 和MAP,也不知道怎么配置可以实现。目前还没有发现怎么弄,有朋友弄出来麻烦告诉 呵呵