Hessian Spring相关使用的简单例子

一。简介

相比WebService,Hessian更简单、快捷。采用的是二进制RPC协议(Binary),因为采用的是二进制协议,所以它很适合于发送二进制数据。Hessian通常通过Web应用来提供服务,因此非常类似于WebService。只是它不使用SOAP协议。 Hessian通过Servlet提供远程服务。需要将匹配某个模式的请求映射到Hessian服务。Spring的DispatcherServlet可以完成该功能,DispatcherServlet可将匹配模式的请求转发到Hessian服务。Hessian的server端提供一个servlet基类, 用来处理发送的请求,而Hessian的
这个远程过程调用,完全使用动态代理来实现的,,推荐采用面向接口编程,因此,Hessian服务建议通过接口暴露。

Hessian处理过程示意图:
客户端——>序列化写到输出流——>远程方法(服务器端)——>序列化写到输出流 ——>客户端读取输入流——>输出结果


二。 不使用Spring框架下的hessian相关例子

      1.  把Hessian相应jar包放入至工程中。

      2.  由于Hessian是采用面向接口编程的,所以编写一个接口,因为客户端仅仅需要接口,而无须真实的实现类。


  1. package demo;  

  2. publicinterface ITest {  

  3. public String sayHello();  

  4. }  


3. 编写一个类实现这个接口。



  1. package demo;  

  2. /**

  3. *

  4. * @author alan

  5. * @createtime 2013-4-11    

  6. *

  7. */

  8. publicclass TestImpl implements ITest {  

  9. @Override

  10. public String sayHello() {  

  11. // TODO Auto-generated method stub

  12. return"HELLO ALAN.";  

  13.    }  

  14. }  


4.  web.xml的详细配置



  1. <!-- noSpring -->  

  2. <servlet>  

  3.    <servlet-name>Hello</servlet-name>  

  4.    <servlet-class>  

  5.        com.caucho.hessian.server.HessianServlet  

  6.    </servlet-class>  

  7.    <init-param>  

  8.        <param-name>home-class</param-name>  

  9.        <param-value>demo.TestImpl</param-value>  

  10.    </init-param>  

  11.    <init-param>  

  12.        <param-name>home-api</param-name>  

  13.        <param-value>demo.ITest</param-value>  

  14.    </init-param>  

  15.    <load-on-startup>1</load-on-startup>  

  16. </servlet>  

  17. <servlet-mapping>  

  18.    <servlet-name>Hello</servlet-name>  

  19.    <url-pattern>/Hello</url-pattern>  

  20. </servlet-mapping>  


5. 客户端远程调用服务器端提供的接口,利用的就是Hessian的HessianProxyFactory,来实现远程代理。


   客户端调用代码例子:


  1. privatestaticvoid noSpring() {  

  2.    String url = "http://localhost:8080/SpringHessian/Hello";  

  3.    HessianProxyFactory factory = new HessianProxyFactory();  

  4. try {  

  5.        ITest hello = (ITest) factory.create(ITest.class, url);  

  6.        System.out.println(hello.sayHello());  

  7.    } catch (MalformedURLException e) {  

  8.        e.printStackTrace();  

  9.    }  

  10. }  


三。 使用spring框架时候的Hessian例子。


Hessian与Spring整合
相比上一种方式,这个方式就有点麻烦了。Hessian通过Servlet提供远程服务。需要将匹配某个模式的请求映射到Hessian服务。Spring的DispatcherServlet可以完成该功能,DispatcherServlet可将匹配模式的请求转发到Hessian服务,web.xml只是定义了“请求转发器”,该转发器将匹配/remoting/*的请求截获,转发给context的bean处理。而HessianServiceExporter提供bean服务。
所以Hessian与Spring整合主要就是一下两个工作:
1:通过DispatcherServlet来拦截URL请求。
2:HessianServiceExporter提供bean服务,Spring使用HessianServiceExporter,将一个常规bean导出成Hessian服务。

具体配置步骤例子如下:

       一。客户端直接调用接口获取Bean实例例子。

       1。和上面的一样。
2。和上面的一样。
3。和上面的一样。
4。web.xml的详细配置


  1. <!-- SpringHessian -->  

  2. <servlet>  

  3.    <servlet-name>remoting</servlet-name>  

  4.    <servlet-class>  

  5.        org.springframework.web.servlet.DispatcherServlet  

  6.    </servlet-class>  

  7.    <load-on-startup>1</load-on-startup>  

  8. </servlet>  

  9. <servlet-mapping>  

  10.    <servlet-name>remoting</servlet-name>  

  11.    <url-pattern>/remoting/*</url-pattern>  

  12. </servlet-mapping>  



5.  在WEB-INF文件夹下配置remoting-servlet.xml文件


  1. <!-- 定义普通bean实例-->  

  2. <bean id="test"class="demo.TestImpl" />  

  3. <!-- 使用HessianServiceExporter 将普通bean导出成Hessian服务-->  

  4. <bean name="/test"class="org.springframework.remoting.caucho.HessianServiceExporter">  

  5.    <!-- 需要导出的目标bean -->  

  6.    <property name="service" ref="test" />  

  7.    <!-- Hessian服务的接口 -->  

  8.    <property name="serviceInterface" value="demo.ITest" />  

  9. </bean>        


6. 客户端调用例子


  1. privatestaticvoid springHessian() throws MalformedURLException {  

  2.    String url = "http://localhost:8080/SpringHessian/remoting/test";    

  3.       HessianProxyFactory factory = new HessianProxyFactory();    

  4.       factory.setDebug(true);  

  5.    ITest hello = (ITest) factory.create(ITest.class, url);  

  6.    System.out.println(hello.sayHello());  

  7. }  


       二。客户端通过配置配置文件获取Bean实例例子。


       1.  客户端引入相关的JAR包。  

2.  客户端定义一个 remote-client.xml文件


  1. <bean id="myServiceClient"class="org.springframework.remoting.caucho.HessianProxyFactoryBean">  

  2. <property name="serviceUrl">  

  3. <value>http://localhost:8080/SpringHessian/remoting/test</value>

  4. </property>  

  5. <property name="serviceInterface">  

  6. <value>demo.ITest</value>  

  7. </property>  

  8. </bean>  


3.  客户端调用例子


  1. try

  2. {  

  3. ApplicationContext context = new ClassPathXmlApplicationContext("remote-client.xml");  

  4. ITest hello =(ITest)context.getBean("myServiceClient");  

  5. System.out.println(hello.sayHello());  

  6. }  

  7. catch (Exception e)  

  8. {  

  9. e.printStackTrace();  


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章