君子博学而日参省乎己 则知明而行无过矣

博客园 首页 新随笔 联系 订阅 管理

一、简介 
     Hessian是一个由Caucho Technology开发的轻量级二进制RPC协议,因为采用的是二进制协议,所以它很适合于发送二进制数据。下面以hessian-3.0.20版本为例演示如何将Hessian整合到Spring中。 

二、配置详解 
     1、在web.xml中的配置

Xml代码  收藏代码
  1. <context-param>  
  2.     <param-name>contextConfigLocation</param-name>  
  3.     <param-value>  
  4.         /WEB-INF/config/applicationContext.xml,  
  5.         /WEB-INF/Hessian-servlet.xml  
  6.     </param-value>  
  7. </context-param>  
  8.           
  9. <servlet>  
  10.     <servlet-name>Hessian</servlet-name>  
  11.     <servlet-class>  
  12.         org.springframework.web.servlet.DispatcherServlet  
  13.     </servlet-class>  
  14.     <load-on-startup>1</load-on-startup>  
  15. </servlet>  
  16.           
  17. <servlet-mapping>  
  18.     <servlet-name>Hessian</servlet-name>  
  19.     <url-pattern>/hessian/*</url-pattern>  
  20. </servlet-mapping>  


       1)Hessian要求远程服务通过Servlet暴露出来,所以我们使用Spring的DispatcherServlet来暴露我们的服务。 
        2)我们必须在WEB-INF目录下创建一个文件名格式为 [Servlet Name]-servlet.xml 的配置文件,由于我们设定servlet-name为Hessian,所以我们在这里创建一个名为Hessian-servlet.xml的文件。 

    2、Hessian-servlet.xml文件的配置

Xml代码  收藏代码
  1. <!-- 业务类 -->  
  2. <bean id="hessianService" class="com.cjm.webservice.hessian.HessianServiceImpl"/>  
  3.           
  4. <!-- 远程服务 -->  
  5. <bean name="/hessianService" class="org.springframework.remoting.caucho.HessianServiceExporter">  
  6.     <property name="service" ref="hessianService"/>  
  7.     <property name="serviceInterface">  
  8.         <value>  
  9.             com.cjm.webservice.hessian.HessianService  
  10.         </value>  
  11.     </property>  
  12. </bean>  


        1)实际业务类是通过Spring的HessianServiceExporter类来暴露给客户端的。 
        2)service:指定服务对应的业务类。 
        3)serviceInterface:指定业务类实现哪个接口。Spring推荐采用面向接口编程,因此,Hessian服务建议通过接口暴露。 
        4)Hessian的远程服务名为/hessianService。笔者使用的web服务器是Tomcat-5.5.23,端口是8888,web应用名为spring2,则远程服务的URL为:http://localhost:8888/spring2/hessian/hessianService。 

    3、业务类源代码

Java代码  收藏代码
  1. //接口类:  
  2. public interface HessianService {  
  3.     public String sayHello(String username);  
  4.     public HessianModel getHessianModel(String username, String password);  
  5. }  
  6.           
  7. //实现类:  
  8. public class HessianServiceImpl implements HessianService {  
  9.     public String sayHello(String username){  
  10.         return "Hello " + username;  
  11.     }   
  12.   
  13.     public HessianModel getHessianModel(String username, String password) {  
  14.         return new HessianModel(username, password);  
  15.     }  
  16. }  
  17.           
  18. //领域模型类:  
  19. public class HessianModel implements Serializable{  
  20.     private String username;  
  21.     private String password;  
  22.                   
  23.     public HessianModel(String username, String password){  
  24.         this.username = username;  
  25.         this.password = password;  
  26.     }  
  27.     ……  
  28. }  



    4、客户端调用服务范例 
         1)在Jsp页面中调用服务

Java代码  收藏代码
  1. String url = "http://localhost:8888/spring2/hessian/hessianService";  
  2. HessianProxyFactory factory = new HessianProxyFactory();  
  3. HessianService hessianServer =   
  4.             (HessianService)factory.create(HessianService.class, url);  
  5. String ret = hessianServer.sayHello("Raymond.chen");  
  6. out.print(ret);  
  7.           
  8. HessianModel model = hessianServer.getHessianModel("uid", "pwd");  
  9. out.print("username: " + model.getUsername() + "<br>");  


             A)结果显示:Hello Raymond.chen 
             B)客户端程序必须引用hessian-3.0.20.jar文件和远程服务对应的接口类。 
             C)当调用的远程服务方法返回一个自定义类时,该自定义类必须实现Serializable接口。 

       2)在Spring环境中调用服务

Xml代码  收藏代码
  1. <bean id="testHessianService" class="org.springframework.remoting.caucho.HessianProxyFactoryBean">  
  2.     <property name="serviceUrl" value="http://localhost:8888/spring2/hessian/hessianService"/>  
  3.     <property name="serviceInterface" value="com.cjm.webservice.hessian.HessianService"/>  
  4. </bean>  
  5.               
  6. <!- Struts2中调用服务 -->  
  7. <bean id="orgAction" class="com.cjm.web.action.OrganizationAction" parent="baseAction">  
  8.     <property name="organizationService" ref="organizationService"/>  
  9.     <property name="testHessianService" ref="testHessianService"/>  
  10. </bean>  



    OrganizationAction.java部分源代码:

Java代码  收藏代码
  1. private HessianService testHessianService;  
  2.               
  3. HessianModel model = testHessianService.getHessianModel("uid", "pwd");  
  4. System.out.println("username: " + model.getUsername());  


        A)使用HessianProxyFactoryBean来连接服务。 
        B)serviceUrl:远程服务的URL。 
        C)serviceInterface:服务对应的接口类。

posted on 2012-06-19 22:32  刺猬的温驯  阅读(3995)  评论(0编辑  收藏  举报