溫馨提示:您的每一次轉(zhuǎn)載,體現(xiàn)了我寫此文的意義!!!煩請您在轉(zhuǎn)載時注明出處http://www.aygfsteel.com/sxyx2008/謝謝合作!!!

          雪山飛鵠

          溫馨提示:您的每一次轉(zhuǎn)載,體現(xiàn)了我寫此文的意義!!!煩請您在轉(zhuǎn)載時注明出處http://www.aygfsteel.com/sxyx2008/謝謝合作!!!

          BlogJava 首頁 新隨筆 聯(lián)系 聚合 管理
            215 Posts :: 1 Stories :: 674 Comments :: 0 Trackbacks
                  baidu百科這樣介紹它:
                  Hessian是一個輕量級的remoting on http工具,使用簡單的方法提供了RMI的功能. 相比WebService,Hessian更簡單、快捷。采用的是二進制RPC協(xié)議,因為采用的是二進制協(xié)議,所以它很適合于發(fā)送二進制數(shù)據(jù).
                  開元百科這樣介紹它:
                  Hessian是Caucho開發(fā)的一種二進制Web Service協(xié)議。采取Apache許可協(xié)議. 
                  The Hessian binary web service protocol makes web services usable without requiring a large framework, and without learning yet another alphabet soup of protocols. Because it is a binary protocol, it is well-suited to sending binary data without any need to extend the protocol with attachments.
          Hessian是一個精心打造的Web Service實現(xiàn),它支持Java、C#、Ruby、PHP和Python,又新增了ActionScript。使用Adobe Flash和Flex的RIA開發(fā)者們在需要集成業(yè)務服務的時候,Hessian應該是一個不錯的選擇。
                  既然都它這么神奇,那么我們就又要去認識下這位新朋友。
                  項目主頁:http://hessian.caucho.com/
                  建議大家仔細認真閱讀下官方網(wǎng)站。
                  還是先從helloworld著手。
                  它只需要一個jar包即可
                  去官方下載適用于java環(huán)境下的jar包支持
                  hessian-4.0.7.jar   hessian-4.0.7-src.jar
                  創(chuàng)建web工程。
                  編寫接口:
          package com.hessian.demo.inf;

          public interface HelloWorld {
              
              
          public String sayHelloWorld(String name);
              
          }
                  編寫實現(xiàn)類:
          package com.hessian.demo.impl;

          import com.hessian.demo.inf.HelloWorld;

          public class HelloWorldImpl implements HelloWorld {

              
          public String sayHelloWorld(String name) {
                  
          return "Hello ,"+name+"Welcome to use hessian ! ";
              }

          }
                  配置web.xml
          <?xml version="1.0" encoding="UTF-8"?>
          <web-app version="2.5" 
              xmlns
          ="http://java.sun.com/xml/ns/javaee" 
              xmlns:xsi
          ="http://www.w3.org/2001/XMLSchema-instance" 
              xsi:schemaLocation
          ="http://java.sun.com/xml/ns/javaee 
              http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
          >
              
          <servlet>
                  
          <servlet-name>helloworld</servlet-name>
                  
          <servlet-class>com.caucho.hessian.server.HessianServlet</servlet-class>
                  
          <init-param>
                      
          <!-- 此處hom-api為固定寫法,為HessianServlet中定義的參數(shù)詳細可參考HessianServlet -->
                      
          <!-- 其值為接口的類長名即 包名+類名 -->
                      
          <param-name>home-api</param-name>
                      
          <param-value>com.hessian.demo.inf.HelloWorld</param-value>
                  
          </init-param>
                  
          <init-param>
                      
          <!-- 此處hom-class為固定寫法,為HessianServlet中定義的參數(shù)詳細可參考HessianServlet -->
                      
          <!-- 其值為實現(xiàn)類的類長名即 包名+類名 -->
                      
          <param-name>home-class</param-name>
                      
          <param-value>com.hessian.demo.impl.HelloWorldImpl</param-value>
                  
          </init-param>
              
          </servlet>
              
          <servlet-mapping>
                  
          <servlet-name>helloworld</servlet-name>
                  
          <url-pattern>/helloworld</url-pattern>
              
          </servlet-mapping>
          </web-app>
                  此處web.xml中配置的初始化參數(shù)具體可參考HessianServlet的init()方法
          public void init(ServletConfig config)
              
          throws ServletException
            {
              
          super.init(config);
              
              
          try {
                
          if (_homeImpl != null) {
                }
                
          else if (getInitParameter("home-class"!= null) {
              String className 
          = getInitParameter("home-class");
              
              Class homeClass 
          = loadClass(className);

              _homeImpl 
          = homeClass.newInstance();
              
              init(_homeImpl);
                }
                
          else if (getInitParameter("service-class"!= null) {
              String className 
          = getInitParameter("service-class");
              
              Class homeClass 
          = loadClass(className);

              _homeImpl 
          = homeClass.newInstance();
              
              init(_homeImpl);
                }
                
          else {
              
          if (getClass().equals(HessianServlet.class))
                
          throw new ServletException("server must extend HessianServlet");

              _homeImpl 
          = this;
                }

                
          if (_homeAPI != null) {
                }
                
          else if (getInitParameter("home-api"!= null) {
              String className 
          = getInitParameter("home-api");
              
              _homeAPI 
          = loadClass(className);
                }
                
          else if (getInitParameter("api-class"!= null) {
              String className 
          = getInitParameter("api-class");

              _homeAPI 
          = loadClass(className);
                }
                
          else if (_homeImpl != null) {
              _homeAPI 
          = findRemoteAPI(_homeImpl.getClass());

              
          if (_homeAPI == null)
                _homeAPI 
          = _homeImpl.getClass();
                }
                
                
          if (_objectImpl != null) {
                }
                
          else if (getInitParameter("object-class"!= null) {
              String className 
          = getInitParameter("object-class");
              
              Class objectClass 
          = loadClass(className);

              _objectImpl 
          = objectClass.newInstance();

              init(_objectImpl);
                }

                
          if (_objectAPI != null) {
                }
                
          else if (getInitParameter("object-api"!= null) {
              String className 
          = getInitParameter("object-api");
              
              _objectAPI 
          = loadClass(className);
                }
                
          else if (_objectImpl != null)
              _objectAPI 
          = _objectImpl.getClass();

                _homeSkeleton 
          = new HessianSkeleton(_homeImpl, _homeAPI);
                
          if (_objectAPI != null)
              _homeSkeleton.setObjectClass(_objectAPI);

                
          if (_objectImpl != null) {
              _objectSkeleton 
          = new HessianSkeleton(_objectImpl, _objectAPI);
              _objectSkeleton.setHomeClass(_homeAPI);
                }
                
          else
              _objectSkeleton 
          = _homeSkeleton;

                
          if ("true".equals(getInitParameter("debug")))
              _isDebug 
          = true;

                
          if ("false".equals(getInitParameter("send-collection-type")))
              setSendCollectionType(
          false);
              } 
          catch (ServletException e) {
                
          throw e;
              } 
          catch (Exception e) {
                
          throw new ServletException(e);
              }
            }
                   編寫客戶端測試代碼:
          package com.hessian.demo.client;

          import com.caucho.hessian.client.HessianProxyFactory;
          import com.hessian.demo.inf.HelloWorld;

          public class HelloWorldClient {
              
              
          public static void main(String[] args) throws Exception{
                  
          //servlet的訪問路徑
                  String url="http://localhost:8080/hessian/helloworld";
                  
          //創(chuàng)建一HessianProxyFactory對象,用法與xfire很像
                  HessianProxyFactory proxyFactory=new HessianProxyFactory();
                  
          //獲得HelloWorld的實例,傳遞兩個參數(shù)依次為:接口.class,該servlet的訪問路徑
                  HelloWorld helloWorld=(HelloWorld) proxyFactory.create(HelloWorld.class, url);
                  System.out.println(helloWorld.sayHelloWorld(
          "張三"));
              }
          }
                  效果圖:


          posted on 2010-09-01 09:24 雪山飛鵠 閱讀(2678) 評論(2)  編輯  收藏 所屬分類: webservice

          Feedback

          # re: Hessian一個輕量級的remoting on http工具[未登錄] 2010-09-01 09:29 匿名
          不錯,歡迎咱們一塊來研究它的源碼。  回復  更多評論
            

          # re: Hessian一個輕量級的remoting on http工具 2010-10-03 15:01 淡茗
          @匿名
          貌似缺失了很多源碼,如com.caucho.hessian.client.HessianProxyFactory 這個類  回復  更多評論
            

          主站蜘蛛池模板: 庆安县| 长阳| 巍山| 浮山县| 宝山区| 金华市| 囊谦县| 衡山县| 那曲县| 洮南市| 通山县| 玛曲县| 福建省| 恩平市| 洛川县| 桐柏县| 阳江市| 邵阳市| 临清市| 永定县| 隆安县| 丹寨县| 阳春市| 石台县| 呼伦贝尔市| 宜章县| 锦州市| 芒康县| 赣州市| 叶城县| 东乡县| 崇文区| 黄石市| 格尔木市| 宁国市| 田林县| 富民县| 鄂托克前旗| 出国| 连南| 邯郸县|