概念
Spring HTTP invoker是spring框架中的一个远程调用模型,执行基于HTTP的远程调用(意味着可以通过防火墙),并使用java的序列化机制在网络间传递对象。
效率
远程调用效率: rmi>spring http invoker>webservice
优点
1.spring http invoker 采用java的序列化机制,并采用类似rmi的方式调用,既能够使用http协议轻松穿过防火墙,又能够保证高效的远程调用。
2.轻量级的远程调用模型,对于采用spring的项目可以无缝嵌入,侵入性小。
3.非常简单,容易上手。
缺点
只支持spring.
例子
服务端
1.web.xml
2. spring配置文件
其中userInfoService为项目原有的service
3. 增加一个service-servlet.xml,放在web-inf目录下
至此服务端发布完毕。
客户端
1. spring配置文件
2. 调用代码
与非远程调用代码一摸一样。
所以说对于采用spring的项目,只需要简单配置,即可实现分布式部署与远程调用。
效率
远程调用效率: rmi>spring http invoker>webservice
优点
1.spring http invoker 采用java的序列化机制,并采用类似rmi的方式调用,既能够使用http协议轻松穿过防火墙,又能够保证高效的远程调用。
2.轻量级的远程调用模型,对于采用spring的项目可以无缝嵌入,侵入性小。
3.非常简单,容易上手。
缺点
只支持spring.
例子
服务端
1.web.xml
- <servlet>
- <servlet-name>service</servlet-name>
- <servlet-class>
- org.springframework.web.servlet.DispatcherServlet
- </servlet-class>
- <load-on-startup>1</load-on-startup>
- </servlet>
- <servlet-mapping>
- <servlet-name>service</servlet-name>
- <url-pattern>/httpservice/*</url-pattern>
- </servlet-mapping>
2. spring配置文件
- <beans>
- <bean id="userInfoServiceProxy" class="org.springframework.remoting.httpinvoker.HttpInvokerServiceExporter">
- <property name="service" ref="userInfoService"/>
- <property name="serviceInterface" value="cn.gov.zjport.skeleton.sso.UserInfoService"/>
- </bean>
- </beans>
其中userInfoService为项目原有的service
3. 增加一个service-servlet.xml,放在web-inf目录下
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
- <beans>
- <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
- <property name="mappings">
- <props>
- <prop key="/userInfoService">userInfoServiceProxy</prop>
- </props>
- </property>
- </bean>
- </beans>
至此服务端发布完毕。
客户端
1. spring配置文件
- <bean id="userInfoService" class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">
- <property name="serviceUrl" value="http://<server>:<port>/<domain>/httpservice/userInfoService"/>
- <property name="serviceInterface" value="cn.gov.zjport.skeleton.sso.UserInfoService"/>
- </bean>
2. 调用代码
- String xml=userInfoService.getUserInfo("simpleadmin", true);
与非远程调用代码一摸一样。
所以说对于采用spring的项目,只需要简单配置,即可实现分布式部署与远程调用。