SpringMVC集成Hessian
转自:http://blog.csdn.net/isea533/article/details/45038779先配置好SpringMVC。主要是在web.xml中有了如下的配置: springMVC-hessian org.springframework.web.servlet.DispatcherServlet 1
·
转自: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框架的应用。
更多推荐
已为社区贡献1条内容
所有评论(0)