ITPub博客

首页 > 应用开发 > IT综合 > Hessian入门(与Spring集成)

Hessian入门(与Spring集成)

IT综合 作者:xz43 时间:2016-04-06 16:14:33 0 删除 编辑

Hessian像RMI一样,使用二进制消息进行客户端和服务端的交互,它的二进制消息可以移植到其他非Java的语言中包括PHP、Python、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。

Hessian入门(Spring集成)


说明
 

1.    讲述如何配置Hessian的服务器端(Spring集成).

2.    讲述客户端如何调用

   使用HessianProxyFactory  Hessian代理工厂直接调用

   使用HessianProxyFactoryBean Hessian代理工厂Bean来完成接口调用.

 

1.    讲述如何配置Hessian的服务器端(Spring集成).

 

 

  

接口定义类: com.nice.isay. Isay:

 

[java] view plain copy
  1. package com.nice.isay;  
  2.   
  3. public interface Isay {  
  4.     public String sayHello(String arg1,String arg2);  
  5. }  


 

接口具体实现类: com.nice.isay. IsayImpl


[java] view plain copy
  1. package com.nice.isay;  
  2.   
  3. public class IsayImpl implements Isay {  
  4.   
  5.     public String sayHello(String arg1, String arg2) {  
  6.         return "Hello:" + arg1 + arg2;  
  7.     }  
  8. }  


配置Web.xml:


点击(此处)折叠或打开

  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>

[java] view plain copy
  1. <servlet>  
  2.     <servlet-name>remote</servlet-name>  
  3.     <!-- 使用Spring的代理Servlet -->  
  4.     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  
  5.     <init-param>  
  6.         <param-name>namespace</param-name>  
  7.         <param-value>classes/remote-servlet</param-value>  
  8.     </init-param>  
  9.     <load-on-startup>1</load-on-startup>  
  10. </servlet>  
  11.   
  12. <servlet-mapping>  
  13.     <servlet-name>remote</servlet-name>  
  14.     <url-pattern>/remote/*</url-pattern>  
  15. </servlet-mapping>  


配置remote-servlet.xml[该文件位于src目录下,即编译后存在与classes下]:

点击(此处)折叠或打开

  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>


点击(此处)折叠或打开

  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] view plain copy
  1. <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">  
  2. <beans>  
  3.     <!-- 接口的具体实现类 -->  
  4.     <bean id="impl" class="com.nice.isay.IsayImpl" />  
  5.     <!-- 使用Spring的HessianServie做代理 -->  
  6.     <bean name="/helloSpring"  
  7.     class="org.springframework.remoting.caucho.HessianServiceExporter">  
  8.         <!-- service引用具体的实现实体Bean-->  
  9.         <property name="service" ref="impl" />  
  10.         <property name="serviceInterface" value="com.nice.isay.Isay" />  
  11.     </bean>  
  12.       
  13.     <!-- 可以配置多个HessianServiceExporter代理Bean -->  
  14. </beans>  


注:

      这个文件为什么叫remote-servlet.xml呢?

因为我们在web.xml中有配置:<servlet-name>remote</servlet-name>

所以remote-servlet.xml的文件名必须以

<servlet-name>中配置的servlet-name作为文件名的开头,

且文件名的格式必须是[servlet-name]-servlet.xml格式,否则检测不到。

    :

<param-value>classes/remote-servlet</param-value>

所以文件名为remote-servlet.xml

 

 

2.    讲述客户端如何调用

        ① 使用HessianProxyFactory  Hessian代理工厂直接调用

 即:

       

[java] view plain copy
  1. package com.nice.test;  
  2.   
  3. import java.net.MalformedURLException;  
  4. import com.caucho.hessian.client.HessianProxyFactory;  
  5. import com.nice.isay.Isay;  
  6.   
  7. public class NormalClient {  
  8.     public static void main(String[] args) throws MalformedURLException {  
  9.         //Spring Hessian代理Servelet  
  10.         String url = "http://localhost:8080/HessianSpring/remote/helloSpring";  
  11.         HessianProxyFactory factory = new HessianProxyFactory();  
  12.         Isay api = (Isay) factory.create(Isay.class, url);  
  13.   
  14.         System.out.println(api.sayHello("chen", "xin"));  
  15.     }  
  16. }  


 

输出Hello:chenxin

 

2.    讲述客户端如何调用

        ② 使用HessianProxyFactoryBean Hessian代理工厂Bean来完成接口调用.

配置客户端 remote-client.xml:


[java] view plain copy
  1. <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">  
  2. <beans>  
  3.     <!-- 客户端Hessian代理工厂Bean -->  
  4.     <bean id="clientSpring" class="org.springframework.remoting.caucho.HessianProxyFactoryBean">  
  5.         <!-- 请求代理Servlet路径 -->          
  6.         <property name="serviceUrl">  
  7. <value>http://localhost:8080/HessianSpring/remote/helloSpring</value>  
  8.         </property>  
  9.         <!-- 接口定义 -->  
  10.         <property name="serviceInterface">  
  11.             <value>com.nice.isay.Isay</value>  
  12.         </property>  
  13.     </bean>  
  14. </beans>  


 

调用:


[java] view plain copy
  1. package com.nice.test;  
  2.   
  3. import org.springframework.context.ApplicationContext;  
  4. import org.springframework.context.support.ClassPathXmlApplicationContext;  
  5. import com.nice.isay.Isay;  
  6.   
  7. public class SpringClient {  
  8.     public static void main(String[] args) {  
  9.         ApplicationContext contex = new ClassPathXmlApplicationContext(  
  10.                 "remote-client.xml");  
  11.   
  12.         // 获得客户端的Hessian代理工厂bean  
  13.         Isay i = (Isay) contex.getBean("clientSpring");  
  14.         System.out.println(i.sayHello("chen", "xin"));  
  15.     }  
  16. }  


 

输出Hello:chenxin

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/9399028/viewspace-2076250/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2010-11-16

  • 博文量
    407
  • 访问量
    1732555