瘋狂

          STANDING ON THE SHOULDERS OF GIANTS
          posts - 481, comments - 486, trackbacks - 0, articles - 1
            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          hessian spring

          Posted on 2010-01-27 21:42 瘋狂 閱讀(8218) 評論(0)  編輯  收藏 所屬分類: spring

          簡介
          相比WebService,Hessian更簡單、快捷。采用的是二進(jìn)制RPC協(xié)議(Binary),因為采用的是二進(jìn)制協(xié)議,所以它很適合于發(fā)送二進(jìn)制數(shù)據(jù)。Hessian通常通過Web應(yīng)用來提供服務(wù),因此非常類似于WebService。只是它不使用SOAP協(xié)議。
          Hessian通過Servlet提供遠(yuǎn)程服務(wù)。需要將匹配某個模式的請求映射到Hessian服務(wù)。Spring的DispatcherServlet可以完成該功能,DispatcherServlet可將匹配模式的請求轉(zhuǎn)發(fā)到Hessian服務(wù)。Hessian的server端提供一個servlet基類, 用來處理發(fā)送的請求,而Hessian的這個遠(yuǎn)程過程調(diào)用,完全使用動態(tài)代理來實現(xiàn)的,,推薦采用面向接口編程,因此,Hessian服務(wù)建議通過接口暴露。
          Hessian處理過程示意圖:
          客戶端——>序列化寫到輸出流——>遠(yuǎn)程方法(服務(wù)器端)——>序列化寫到輸出流 ——>客戶端讀取輸入流——>輸出結(jié)果
          環(huán)境搭建
          Hessian的下載和安裝請按如下步驟進(jìn)行:
          (1)登http://www.caucho.com/hessian/下載Hessian。
          (2)把Hessian相應(yīng)的Jar包放到Web應(yīng)用下,所有的jar文件都應(yīng)該放在WEB-INF/lib下,該文件也不例外。
          兩種方式
          純Hessian
          這種方式主要是適用于工程中沒有適用像spring框架的情況下,好處是配置方便,但是當(dāng)內(nèi)容多的情況下,配置的內(nèi)容很多。
          下面我就把我在做實例的一些相關(guān)步驟描述如下:
          1:把Hessian相應(yīng)jar包放入至工程中。
          2:由于Hessian是采用面向接口編程的,所以編寫一個接口,因為客戶端僅僅需要接口,而無須真實的實現(xiàn)類。
          package jzh.demo;
          public interface IHello {
          String sayHello();
          }
          3:編寫一個類實現(xiàn)這個接口。
          package jzh.demo.impl;
          import jzh.demo.IHello;
          import com.caucho.hessian.server.HessianServlet;
          public class Hello extends HessianServlet implements IHello {
          public String sayHello() {
          return "Hello world";
          }
          }
          4:web.xml的詳細(xì)配置
          <servlet>
          <servlet-name>Hello</servlet-name>
          <servlet-class>com.caucho.hessian.server.HessianServlet</servlet-class>
          <init-param>
          <param-name>home-class</param-name>
          <param-value>jzh.demo.imple.Hello</param-value>
          </init-param>
          <init-param>
          <param-name>home-api</param-name>
          <param-value>jzh.demo.IHello</param-value>
          </init-param>
          <load-on-startup>1</load-on-startup>
          </servlet>

          <servlet-mapping>
          <servlet-name>Hello</servlet-name>
          <url-pattern>/Hello</url-pattern>
          </servlet-mapping>

          5:客戶端遠(yuǎn)程調(diào)用服務(wù)器端提供的接口,利用的就是Hessian的HessianProxyFactory,來實現(xiàn)遠(yuǎn)程代理。
          1) 把服務(wù)器端的生成的jar包,放入工程中。
          2) 相應(yīng)的片段程序如下:
          String url = "http://220.114.108.185:8080/Hessian/Hello";
          HessianProxyFactory factory = new HessianProxyFactory();
          try {
          IHello hello =(IHello)factory.create(IHello.class,url);
          System.out.println(hello.sayHello());
          } catch (MalformedURLException e) {
          e.printStackTrace();
          }
          6:功能完成。
          Hessian與Spring整合
          相比上一種方式,這個方式就有點麻煩了。Hessian通過Servlet提供遠(yuǎn)程服務(wù)。需要將匹配某個模式的請求映射到Hessian服務(wù)。Spring的DispatcherServlet可以完成該功能,DispatcherServlet可將匹配模式的請求轉(zhuǎn)發(fā)到Hessian服務(wù),web.xml只是定義了“請求轉(zhuǎn)發(fā)器”,該轉(zhuǎn)發(fā)器將匹配/remoting/*的請求截獲,轉(zhuǎn)發(fā)給context的bean處理。而HessianServiceExporter提供bean服務(wù)。
          所以Hessian與Spring整合主要就是一下兩個工作:
          1:通過DispatcherServlet來攔截URL請求。
          2:HessianServiceExporter提供bean服務(wù),Spring使用HessianServiceExporter,將一個常規(guī)bean導(dǎo)出成Hessian服務(wù)。
          下面我就把我在做實例的一些相關(guān)步驟描述如下:
          1:和上面的一樣。
          2:和上面的一樣。
          3:和上面的一樣。
          4:web.xml的詳細(xì)配置
          <servlet>
          <servlet-name>remoting</servlet-name>
          <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
          <load-on-startup>1</load-on-startup>
          </servlet>
          <servlet-mapping>
          <servlet-name>remoting</servlet-name>
          <url-pattern>/remoting/*</url-pattern>
          </servlet-mapping>
          5:配置remoting-servlet.xml文件
          <!-- 定義普通bean實例-->
          <bean id="hello" class="jzh.demospring.impl.Hello"/>
          <!-- 使用HessianServiceExporter 將普通bean導(dǎo)出成Hessian服務(wù)-->
          <bean name="/HessianRemoting" class="org.springframework.remoting.caucho.HessianServiceExporter">
          <!-- 需要導(dǎo)出的目標(biāo)bean-->
          <property name="service" ref="hello"/>
          <!-- Hessian服務(wù)的接口-->
          <property name="serviceInterface" value="jzh.demospring.IHello"/>
          </bean>
          6:客戶端定義一個remote-client.xml文件
          <bean id="myServiceClient" class="org.springframework.remoting.caucho.HessianProxyFactoryBean">
          <property name="serviceUrl">
          <value>http://220.114.99.62:8080/HessianSpring/remoteing/HessianRemoting</value>
          </property>
          <property name="serviceInterface">
          <value>jzh.demospring.IHello</value>
          </property>
          </bean>
          7:客戶端調(diào)用。
          try
          {
          ApplicationContext context = new ClassPathXmlApplicationContext("remote-client.xml");

          IHello hello =(IHello)context.getBean("myServiceClient");

          System.out.println(hello.sayHello());
          }
          catch (Exception e)
          {
          e.printStackTrace();
          }
          轉(zhuǎn)載自:http://hi.baidu.com/javahua/blog/item/289e4a66c50a152dab184cec.html

          主站蜘蛛池模板: 宁蒗| 察雅县| 南昌市| 临邑县| 松滋市| 中阳县| 台中县| 郓城县| 宕昌县| 永和县| 绥滨县| 永泰县| 邵东县| 吴忠市| 策勒县| 玉屏| 星座| 甘孜县| 炉霍县| 吉首市| 封丘县| 莱阳市| 乌拉特前旗| 浮山县| 庄浪县| 腾冲县| 汝阳县| 奉节县| 普宁市| 胶州市| 辉南县| 新营市| 桐乡市| 莫力| 石阡县| 肃北| 长治县| 缙云县| 当阳市| 谷城县| 衢州市|