Spring使用远程服务之Hessian

原文地址:http://blog.csdn.net/junshuaizhang/article/details/28441907

Hessian像RMI一样,使用二进制消息进行客户端和服务端的交互,它的二进制消息可以移植到其他非Java的语言中包括PHPPython、C++和C#。因为Hessian是基于HTTP的,所以HessianSeriviceExporter实现为一个spring MVC控制器。


HessianSeriviceExporter是一个SpringMVC控制器,它可以接收Hessian请求,并将这些请求翻译成对POJO的调用来,从而将POJO导出为一个Hessian服务



为了使用导出Hessian服务,我们需要执行两个额外的配置步骤:

1、在web.xml中配置Spring的DispatcherServlet,并把我们的应用部署为Web应用;

2、在Spring的配置文件中配置一个URL处理器,将Hessian服务的URL分发给对应的Hessian服务Bean。

下面我们距离说明

我的项目分层



web.xml

[html]  view plain  copy
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <web-app version="3.0"   
  3.     xmlns="http://java.sun.com/xml/ns/javaee"   
  4.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
  5.     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   
  6.     http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">  
  7.   <display-name></display-name>   
  8.   <welcome-file-list>  
  9.     <welcome-file>index.jsp</welcome-file>  
  10.   </welcome-file-list>  
  11.   <listener>  
  12. <listener-class>  
  13. org.springframework.web.context.ContextLoaderListener  
  14. </listener-class>  
  15. </listener>  
  16.       <!-- 在此处配置刚刚写的spring-hessian.xml的位置 -->    
  17.     <context-param>    
  18.         <param-name>contextConfigLocation</param-name>    
  19.         <param-value>      
  20.             classpath:/spring-hessian.xml    
  21.         </param-value>    
  22.     </context-param>   
  23.       
  24.       
  25.     <servlet>    
  26.     <!-- servlet-name保持与spring-hessian.xml中一致 -->    
  27.     <servlet-name>HelloServiceExporter</servlet-name>    
  28.     <servlet-class>org.springframework.web.context.support.HttpRequestHandlerServlet</servlet-class>    
  29.     </servlet>    
  30.     <servlet-mapping>    
  31.         <servlet-name>HelloServiceExporter</servlet-name>    
  32.         <url-pattern>/HelloService</url-pattern>    
  33.     </servlet-mapping>    
  34.   
  35. </web-app>  

spring-hessian.xml

[html]  view plain  copy
  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"   
  4.     xmlns:jee="http://www.springframework.org/schema/jee"  
  5.     xmlns:tx="http://www.springframework.org/schema/tx"   
  6.     xmlns:context="http://www.springframework.org/schema/context"  
  7.     xmlns:aop="http://www.springframework.org/schema/aop"  
  8.     xmlns:p="http://www.springframework.org/schema/p"  
  9.     xsi:schemaLocation="http://www.springframework.org/schema/beans  
  10.      http://www.springframework.org/schema/beans/spring-beans-3.0.xsd  
  11.      http://www.springframework.org/schema/tx  
  12.      http://www.springframework.org/schema/tx/spring-tx-3.0.xsd  
  13.      http://www.springframework.org/schema/jee  
  14.      http://www.springframework.org/schema/jee/spring-jee-3.0.xsd  
  15.      http://www.springframework.org/schema/aop  
  16.      http://www.springframework.org/schema/aop/spring-aop-3.0.xsd  
  17.      http://www.springframework.org/schema/context  
  18.      http://www.springframework.org/schema/context/spring-context-3.0.xsd  
  19.      http://activemq.apache.org/schema/core  
  20.      http://activemq.apache.org/schema/core/activemq-core.xsd"  
  21.     default-lazy-init="true">   
  22.       
  23.     <context:annotation-config />  
  24.     <!-- 组件扫描,使用annotation 自动注册bean,并检查@Required,@Autowired的属性已被注入 -->  
  25.     <context:component-scan base-package="hessian" />  
  26.   
  27.     <!-- 自动装配 -->  
  28.     <bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor" />  
  29.       
  30.       
  31.     <!-- Name保持与web.xml中的一致,web.xml下文中描述 -->    
  32.     <bean name="HelloServiceExporter"    
  33.         class="org.springframework.remoting.caucho.HessianServiceExporter">    
  34.         <!-- service的ref与HelloServiceImpl中@Service中配置的一致 -->    
  35.         <property name="service" ref="helloService" />    
  36.         <!-- 接口的路径 -->    
  37.         <property name="serviceInterface"    
  38.             value="hessian.HelloService" />    
  39.     </bean>    
  40. </beans>    

java类

[java]  view plain  copy
  1. package hessian;  
  2.   
  3. public interface HelloService {  
  4.   
  5.     void sayHello(String name);  
  6.   
  7. }  


[java]  view plain  copy
  1. package hessian;  
  2.   
  3. import org.springframework.stereotype.Service;  
  4.   
  5. @Service("helloService")    
  6. public class HelloServiceImpl implements HelloService {    
  7.     
  8.     /* (non-Javadoc)  
  9.      * @see com.gsoft.geloin.service.HelloService#sayHello(java.lang.String)  
  10.      */    
  11.     @Override    
  12.     public void sayHello(String name) {    
  13.         System.out.println("Hello " + name + "!");    
  14.     }    
  15.     
  16. }   


客户端的调用

首先将Service的打成jar包加入到客户端程序中

测试代码

[java]  view plain  copy
  1. package hessionclient;  
  2.   
  3. import hessian.HelloService;  
  4.   
  5. import com.caucho.hessian.client.HessianProxyFactory;  
  6.   
  7. public class ArticleManager {  
  8.     public static void main(String[] args) {    
  9.         try {    
  10.             String url = "http://localhost:8080/SpringTest/HelloService";    
  11.             HessianProxyFactory factory = new HessianProxyFactory();    
  12.             HelloService helloService = (HelloService) factory.create(    
  13.                     HelloService.class, url);    
  14.             helloService.sayHello("张三");    
  15.         } catch (Exception e) {    
  16.             e.printStackTrace();    
  17.         }    
  18.     }    
  19. }  

客户端调用图



参考:

《Spring实战(第3版)》

PS:代码主体来源于网络


python023基于Python旅游景点推荐系统带vue前后端分离毕业源码案例设计 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
JSP基于SSM网上医院预约挂号系统毕业源码案例设计 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值