zoukankan      html  css  js  c++  java
  • spring集成PHPRPC及使用

    PHPRPC,它的商业版本是Hprose。这里仅记录其使用方法。其它相关内容可自行搜索。

    对于开源的东西,建议大家看看其源码。

    1、需要引入的jar包:phprpc_spring.jar,http://pan.baidu.com/s/1eQhbUwU

    2、web.xml中添加的内容:

     1 <!-- phprpc -->
     2     <servlet>
     3         <servlet-name>phprpc</servlet-name>
     4         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
     5         <init-param>
     6             <param-name>contextConfigLocation</param-name>
     7             <param-value>classpath:phprpc-servlet.xml</param-value>
     8             <!-- <param-value>WEB-INF/classes/phprpc-servlet.xml</param-value> -->
     9         </init-param>
    10         <load-on-startup>2</load-on-startup>
    11     </servlet>
    12     <servlet-mapping>
    13         <servlet-name>phprpc</servlet-name>
    14         <url-pattern>/phprpc/*</url-pattern>
    15     </servlet-mapping> 

    3、新建phprpc-servlet.xml,内容如下:

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <beans xmlns="http://www.springframework.org/schema/beans"
     3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
     4     xmlns:tx="http://www.springframework.org/schema/tx"
     5     xsi:schemaLocation="http://www.springframework.org/schema/beans
     6 http://www.springframework.org/schema/beans/spring-beans-3.2.xsd">
     7 
     8     
     9     <!-- PHPRPC配置 -->
    10     <!--appservice中要注入的内容,需要set和get方法。同时此处用property配置好。不讲详细了 -->
    11     <bean id="phprpcControllerImpl" class="com.XXXX.biz.controller.PhprpcControllerImpl">
    12         <property name="phprpcService" ref="phprpcService"></property>
    13     </bean>
    14 
    15     <bean name="/phpRpcService.htm" class="org.phprpc.spring.remoting.PHPRPC_Exporter">
    16         <property name="service" ref="phprpcControllerImpl" />
    17         <property name="serviceInterface" value="com.XXXX.biz.controller.PhprpcController" />
    18     </bean>
    19 </beans>  
    20 
    21 
    22 
    23     

    2和3决定了可以使用 项目路径例如:http://localhost:8080/project/phprpc/phpRpcService.htm 访问接口。

    4、分别新建以下内容

    接口:PhprpcController.java

    public interface PhprpcController {
    
        public String test(String type,Object firstorders,Object secondorders,Object thirdorders);
    }

    接口实现类:PhprpcControllerImpl.java

    @Controller
    public class PhprpcControllerImpl extends BaseController implements PhprpcController{
        
        @Autowired
        private PhprpcService phprpcService;
        
        public PhprpcService getPhprpcService() {
            return phprpcService;
        }
    
        public void setPhprpcService(PhprpcService phprpcService) {
            this.phprpcService = phprpcService;
        }
    
        
        public String test(String type,Object firstorders,Object secondorders,Object thirdorders) {
            log.info("执行rpc。。。 type:"+type+" firstorders:"+firstorders+" secondorders:"+secondorders+" thirdorders"+thirdorders);
            log.info("参数类型。。。 type:"+type+" firstorders:"+firstorders.getClass().getName()+
                    " secondorders:"+secondorders.getClass().getName()+" thirdorders"+thirdorders.getClass().getName());
            String msg = "Hello PHPRPC!";
            return msg;
        }
    }

    --------------------分界线--------------------------上面是构建phpRpc,下面是使用----------------------------------------分界线-------------------------------------------

    5、在知道了类似 【http://localhost:8080/project/phprpc/phpRpcService.htm】这样的地址后,我们可以在另外一个程序中这样使用该rpc提供的方法。

    以下代码和前面4段没有什么关系,仅随意展示了其一些使用方法,方法名【pushOrderData】并无实际意义,请勿自行关联,以防被误导。

    A、invoke的参数:第一个为方法名,第二个为传入方法的参数(对象数组,必须按照顺序存放参数)
    B、
    org.phprpc.util.Cast 是一个PHPRPC封装好的数据类型转换工具类。
    public class PhpRpcDemo {  
        public static void main(String[] args) throws UnsupportedEncodingException {  
            String url3 = "http://localhost:8080/XXXXXX/phprpc/phpRpcService.htm";
            PHPRPC_Client client = new PHPRPC_Client(url3);  
             //PhprpcClient.setEncryptMode(3);
            //1获取公钥
            Object tempRet = client.invoke("getRsaPulbicKey", new Object[] {});
            
            String tempJsonStr = Cast.toString(tempRet);
            
            System.out.println(tempJsonStr);
            
            //回调
            //test1(client);
            
            //Map 和 List 类型
            //test2(client);  
            
            //String类型
            String jsons2 = "[{'id':'872'}]";
            Object ret = client.invoke("pushOrderData", new Object[] {"1",null,jsons2,null,null});
            String s = Cast.toString(ret);
            System.out.println(s); */ 
            
            //也可以以 callback形式调用.  
          /*  client.invoke("say", new Object[] {}, new PHPRPC_Callback() {  
                public void handler(String result, Object[] args) {  
                    System.out.println("handler:");  
                    System.out.println(result);  
                    System.out.println("args:"+args[0]);  
                    System.out.println();  
                }  
            });*/
        }
    
        private static void test2(PHPRPC_Client client) {
         AssocArray ret1
    = (AssocArray)client.invoke("pushOrderData", new Object[] {"1","","",""}); Map m = ret1.toHashMap(); //Cast.toString(null); System.out.println(m); } private static void test1(PHPRPC_Client client) { Object[] d = new Object[4]; client.invoke("pushOrderData", d,new PHPRPC_Callback() { public void handler(String result, Object[] args) { System.out.println("handler:"); System.out.println(result); System.out.println("args:"+args[0]); System.out.println(); } }); System.out.println(d); } }
  • 相关阅读:
    springMVC准确定位多个参数对象的属性
    java正则表达式应用
    mybatis与mysql插入数据返回主键
    xml文件中怎么写小于号 等特殊符号
    sqlserver 分页查询 举例
    Python报错:IndentationError: expected an indented block
    统计输入的汉字,数字,英文,other数量
    easyui+ajax获取同表关联的数据
    JAVA死锁
    mybatis自动生成mapper,dao映射文件
  • 原文地址:https://www.cnblogs.com/flying607/p/4543790.html
Copyright © 2011-2022 走看看