spring集成PHPRPC及使用
PHPRPC,它的商业版本是Hprose。这里仅记录其使用方法。其它相关内容可自行搜索。
对于开源的东西,建议大家看看其源码。
1、需要引入的jar包:phprpc_spring.jar,http://pan.baidu.com/s/1eQhbUwU。
2、web.xml中添加的内容:
<!-- phprpc -->
<servlet>
<servlet-name>phprpc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:phprpc-servlet.xml</param-value>
<!-- <param-value>WEB-INF/classes/phprpc-servlet.xml</param-value> -->
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>phprpc</servlet-name>
<url-pattern>/phprpc/*</url-pattern>
</servlet-mapping>
3、新建phprpc-servlet.xml,内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.2.xsd"> <!-- PHPRPC配置 -->
<!--appservice中要注入的内容,需要set和get方法。同时此处用property配置好。不讲详细了 -->
<bean id="phprpcControllerImpl" class="com.XXXX.biz.controller.PhprpcControllerImpl">
<property name="phprpcService" ref="phprpcService"></property>
</bean> <bean name="/phpRpcService.htm" class="org.phprpc.spring.remoting.PHPRPC_Exporter">
<property name="service" ref="phprpcControllerImpl" />
<property name="serviceInterface" value="com.XXXX.biz.controller.PhprpcController" />
</bean>
</beans>
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);
}
}
spring集成PHPRPC及使用的更多相关文章
- 从零开始学 Java - Spring 集成 Memcached 缓存配置(二)
Memcached 客户端选择 上一篇文章 从零开始学 Java - Spring 集成 Memcached 缓存配置(一)中我们讲到这篇要谈客户端的选择,在 Java 中一般常用的有三个: Memc ...
- 从零开始学 Java - Spring 集成 ActiveMQ 配置(一)
你家小区下面有没有快递柜 近两年来,我们收取快递的方式好像变了,变得我们其实并不需要见到快递小哥也能拿到自己的快递了.对,我说的就是类似快递柜.菜鸟驿站这类的代收点的出现,把我们原来快递小哥必须拿着快 ...
- 【转】Dubbo使用例子并且和Spring集成使用
一.编写客户端和服务器端共用接口类1.登录接口类public interface LoginService { public User login(String name, String psw ...
- 从零开始学 Java - Spring 集成 Memcached 缓存配置(一)
硬盘和内存的作用是什么 硬盘的作用毫无疑问我们大家都清楚,不就是用来存储数据文件的么?如照片.视频.各种文档或等等,肯定也有你喜欢的某位岛国老师的动作片,这个时候无论我们电脑是否关机重启它们永远在那里 ...
- axis2+spring集成
转载自:http://www.cnblogs.com/linjiqin/archive/2011/07/05/2098316.html 1.新建一个web project项目,最终工程目录如下: 注意 ...
- rabbitMQ第五篇:Spring集成RabbitMQ
前面几篇讲解了如何使用rabbitMq,这一篇主要讲解spring集成rabbitmq. 首先引入配置文件org.springframework.amqp,如下 <dependency> ...
- 从零开始学 Java - Spring 集成 ActiveMQ 配置(二)
从上一篇开始说起 上一篇从零开始学 Java - Spring 集成 ActiveMQ 配置(一)文章中讲了我关于消息队列的思考过程,现在这一篇会讲到 ActivMQ 与 Spring 框架的整合配置 ...
- spring集成常用技术的配置
使用spring集成其他技术,最基本的配置都是模板化的,比如配置视图模板引擎.数据库连接池.orm框架.缓存服务.邮件服务.rpc调用等,以spring的xml配置为例,我将这些配置过程整理出来,并不 ...
- Activiti工作流学习(三)Activiti工作流与spring集成
一.前言 前面Activiti工作流的学习,说明了Activiti的基本应用,在我们开发中可以根据实际的业务参考Activiti的API去更好的理解以及巩固.我们实际的开发中我们基本上都使用sprin ...
随机推荐
- suse10与suse11连接Xmanager的配置
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://feidandelion.blog.51cto.com/1050439/42217 ...
- linux select函数详解【转】
转自:http://www.cnblogs.com/ccsccs/articles/4224253.html 在Linux中,我们可以使用select函数实现I/O端口的复用,传递给 select函数 ...
- 让vim的在输入模式下现实光标不同
前几天用过苹果之后,发现vim中在插入模式下与命令模式下光标形状不同,根据光标形状就可以快速确认所在的模式,很方便,后来查了很多资料,一直查到官方的wiki也没有搞定,后来,终于搞定,现记录如下:我的 ...
- vboxmanage查询正在运行的vbox虚拟机
系统:linux通用,virtualbox5.0 每次用下面命令启动vm虚拟机时,发现没办法知道它的IP. $ vboxmanage startvm <vmname> --type hea ...
- Java异常throws与throw的区别
throws关键字通常被应用在声明方法时,用来指定可能抛出的异常.多个异常可以使用逗号隔开.当在主函数中调用该方法时,如果发生异常,就会将异常抛给指定异常对象.谁调用谁处理: 抛出异常throws: ...
- hdu 3790(SPFA)
最短路径问题 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Subm ...
- HDU 6108.小C的倍数问题 (2017"百度之星"程序设计大赛 - 初赛(A)1001)
补完题?不存在的. 这么久了,还是一条咸鱼,看一堆乱七八糟的东西,写一堆没用的水题,一点进步都没有,还是那么菜,菜的掉渣. 这个百毒之星初赛A还会写两道最简单的水题,初赛B一点也不会,菜的难过... ...
- (1)OracleClient数据库操作(淘汰)
一.数据库连接 Oracle 数据提供程序,位于System.Data.OracleClient 命名空间.( .NET 4 以后的版本,会将不在维护和更新了) 第一步:引入命名空间 在程序的开头写上 ...
- AppScan 浏览器兼容解决
手动探索的时候,因为打开的浏览器是appscan自带的,可能会存在兼容性问题,有些页面无法正常打开.那么是否可以用我们电脑上的浏览器(IE .火狐.谷歌)来进行录制 菜单栏--工具---选项----首 ...
- Frequency
题目描述 Snuke loves constructing integer sequences. There are N piles of stones, numbered 1 through N. ...