webservices学习之phprpc

最近学习了一下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,也不知道怎么配置可以实现。目前还没有发现怎么弄,有朋友弄出来麻烦告诉 呵呵

你可能感兴趣的:(java,C++,c,C#,phprpc)