转自:http://blog.csdn.net/isea533/article/details/45038779

先配置好SpringMVC。

在web.xml中追加如下的配置:
<servlet>
    <servlet-name>springMVC-hessian</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
   <!-- springMVC的映射配置 -->
</servlet-mapping>

<!-- 集成Hessian,为了针对Hessian的请求,在web.xml中增加了如下映射 -->
<servlet-mapping>
    <servlet-name>springMVC-hessian</servlet-name>
    <url-pattern>*.hessian</url-pattern>
</servlet-mapping>

配置相应的springMVC-hessian-servlet.xml文件:
<!--hessian-->
<bean id="httpRequestHandlerAdapter" class="org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter"/>
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
<bean id="importService" class="com.xxx.pr.service.impl.ImportServiceImpl"/>
<bean name="/import.hessian" class="org.springframework.remoting.caucho.HessianServiceExporter">
    <property name="service" ref="importService"/>
    <property name="serviceInterface" value="com.xxx.pr.service.ImportService"/>
</bean>

HessianServiceExporter是继承HttpRequestHandler接口的,
所以需要HttpRequestHandlerAdapter来处理这种请求。

BeanNameUrlHandlerMapping的作用是,当<bean>的name属性以/开头的时候,映射为url请求。
HessianServiceExporter中的两项属性,一个是service,ref属性指向的实现类。一个是serviceInterface,指向的是接口。

做好如上配置后,启动服务器。
然后访问http://localhost:8080/myweb/import.hessian即可。
在浏览器打开后,会显示下面的样子:
HTTP Status 405 - HessianServiceExporter only supports POST requests
type Status report
message HessianServiceExporter only supports POST requests
description The specified HTTP method is not allowed for the requested resource.

如果如上显示,说明就没有问题了。

**spring客户端调用
客户端配置:
<bean id="hessianRemoteServerBean"  class="org.springframework.remoting.caucho.HessianProxyFactoryBean">  
    <property name="serviceUrl"  value="http://localhost:8080/myweb/import.hessian"></property>  
    <property name="serviceInterface" value="com.xxx.pr.service.ImportService"></property>  
</bean> 


具体调用时,若是本地调用,可以采用注入或者直接从spring容器中获取到hessianRemoteServerBean,然后直接调用接口ImportService的实现类的远程方法。
远程调用,需先将远程服务端接口打成jar包导入本地工程或者添加maven依赖,也即生成客户端本地的远程服务的代理对象,类似于CXF调用webservice需要先生成本地客户端代码一样。

非spring客户端直接使用Hessian调用:
String url = "http://localhost:8080/myweb/import.hessian";
HessianProxyFactory factory = new HessianProxyFactory();
ImportService basic = (ImportService) factory.create(ImportService.class, url);


当然,实现远程调用的还有很多方法,比如:JDK 自带的RMI以及CXF,axis,spring的http Invoker等,比较如下:

RMI使用JRMP协议(基于TCP/IP),不允许穿透防火墙,使用JAVA系列化方式,适用于任何JAVA应用之间相互调用。

Hessian
使用HTTP协议,允许穿透防火墙,使用自己的系列化方式,支持JAVA、C++、.Net等跨语言使用。

Burlap:
与Hessian相同,只是Hessian使用二进制传输,而Burlap使用XML格式传输(两个产品均属于caucho公司
的开源产品)

Spring HTTP Invoker:
使用HTTP协议,允许穿透防火墙,使用JAVA系列化方式,但仅限于Spring应用之间使用,即                                                      调用者与被调用者都必须是使用Spring框架的应用。

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐