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();  


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