Hessian, 短小精悍的webService 解決方案

Hessian, 短小精悍的webService 解決方案 

可能你不知道這個單詞:Hessian 我查過, 是:hessian  n. 粗麻布 我暈倒, 怎麼這麼多的Java愛好者, 把這些名字都取得稀奇古怪。

   言規正傳, 我們萊說這塊:粗麻布 (它的英文發音也很奇怪), 這個140K的東西, 可以替代Webservice 或者說它就是一個webService的構建者,可以實現非SOAP協議的遠程事務調用, 對象傳遞和大文件傳遞。

   先看看怎麼部署它,我用的Java Container是他的哥哥Resin(也是一個奇怪的名字),先把這個140kbJar拷貝到你的webapp目錄的WEB-INF下的lib目錄裏面。, 接下來我們做一個tutorship

先建立一個接口, 相當於EJB裏面的stub,如下:

package app.demo;

public interface BasicAPI {

    public String hello();

     public User getUser();

再建立一個實現類:

package app.demo;

public class BasicService implements BasicAPI{

    private String _greeting = "Hello, world";

      public void setGreeting(String greeting)

      {

        _greeting = greeting;

      }

       public String hello()

       public String hello()

       public String hello()

       public String hello()

       public String hello()

       public String hello()

      {

        return _greeting;

      }

       public User getUser(){

       public User getUser(){

       public User getUser(){

       public User getUser(){

       public User getUser(){

       public User getUser(){

          return new User("prance","meshow");

      }

}

爲了查看它是否可以傳遞對象, 我們再建立一個可以序列化的User對象

package app.demo;

public class User implements java.io.Serializable  {

    String userName="snoopy";

    String password ="showme";

    public User( String user, String pwd){

        this.userName =user;

        this.password =pwd;

    }

    public String getUserName() {

        return userName;

    }

    public String getPassword() {

        return password;

    }

} 

好了接下部署在你的webapp下面, 申明一下, 這個麻布可以在它哥哥的早期版本下面使用, 我在resin2.1.10下面測試是可以的, 廢話不說, 直接配置web.xml如下

<servlet servlet-name="hello"

           servlet-class="com.caucho.hessian.server.HessianServlet">

    <init-param service-class="app.demo.BasicService"/>

    <init-param api-class="app.demo.BasicAPI"/>

  </servlet> 

  <servlet-mapping url-pattern="/hello" servlet-name="hello"/>

人們的好奇心就是沒有救, 我訪問了一下這個servlet 大家可能很奇怪, 我沒有寫servlet呀, 當然, hessian-3.0.13.jar裏面有, 你如果看到一行字:

Hessian Requires POST

沒錯,就是它。

先試一下用客戶程序來訪問它:

代碼如下:

package app.demo;

import com.caucho.hessian.client.HessianProxyFactory;

public class BasicClient {

  public static void main(String []args)

    throws Exception

  {

    String url = "http://127.0.0.1:81/demo/hello";

     HessianProxyFactory factory = new HessianProxyFactory();

     HessianProxyFactory factory = new HessianProxyFactory();

     HessianProxyFactory factory = new HessianProxyFactory();

     HessianProxyFactory factory = new HessianProxyFactory();

     HessianProxyFactory factory = new HessianProxyFactory();

     HessianProxyFactory factory = new HessianProxyFactory();

    BasicAPI basic = (BasicAPI) factory.create(BasicAPI.class, url);

     System.out.println("Hello: " + basic.hello());

     System.out.println("Hello: " + basic.hello());

     System.out.println("Hello: " + basic.hello());

     System.out.println("Hello: " + basic.hello());

     System.out.println("Hello: " + basic.hello());

     System.out.println("Hello: " + basic.hello());

    System.out.println("Hello: " + basic.getUser() .getUserName() );

      System.out.println("Hello: " + basic.getUser().getPassword()  );

   }

   }

   }

   }

   }

   }

}

直接執行, 結果是這樣的:

Hello: Hello, world

Hello: prance

Hello: meshow

這個結果說明, 從一個client application是可以調用hessian的, 而且可以傳遞對象。

最後用一個jsp來檢驗一下:

<%@ page import="com.caucho.hessian.client.HessianProxyFactory,

                 app.demo.BasicAPI"%>

<%@page language="java" %>

<%

 String url = ("http://" +request.getServerName() + ":" + request.getServerPort() +

          request.getContextPath() + "/hello");

    out.println(url);

    HessianProxyFactory factory = new HessianProxyFactory();

    BasicAPI basic = (BasicAPI) factory.create(BasicAPI.class, url);

    out.println("Hello: " + basic.hello());

    out.println("Hello: " + basic.getUser() .getUserName() );

    out.println("Hello: " + basic.getUser().getPassword()  ); 

%>

好了, 全部測試完畢, 簡簡單單, 快快樂樂。

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