Hessian進行遠程對象調用(轉)

具體網址參見如下:

http://baike.baidu.com/view/2255290.htm

Hessian

百科名片

  
hessian

Hessian是一個輕量級的remoting onhttp工具,使用簡單的方法提供了RMI的功能. 相比WebService,Hessian更簡單、快捷。採用的是二進制RPC協議,因爲採用的是二進制協議,所以它很適合於發送二進制數據



Hessian 介紹

注意事項

  在進行基於Hessian的項目開發時,應當注意以下幾點:   
       ▲JAVA服務器端必須具備以下幾點:   
        ·包含Hessian的jar包   
        ·設計一個接口,用來給客戶端調用   
        ·實現該接口的功能   
        ·配置web.xml,配好相應的servlet   
        ·對象必須實現Serializable 接口   
        ·對於複雜對像可以使用Map的方法傳遞   
      ▲客戶端必須具備以下幾點:   
        ·java客戶端包含Hessian.jar的包。C#中引用hessianCSharp.dll   
        ·具有和服務器端結構一樣的接口。包括命名空間都最好一樣   
        ·利用HessianProxyFactory調用遠程接口。   
簡單JAVA客戶端例子:

服務器端

新建一個名EasyHessionwebProject 項目,Hessian.jar 放入web-inf 下的lib

 

  創建接口:

  packageapp.demo;

  public interfaceBasicAPI {

  public void setGreeting(Stringgreeting);

  public String hello();

  public User getUser();

  }

  實現接口:

  packageapp.demo;

  publicclass BasicService implements BasicAPI {

  privateString _greeting = "Hello, world";

  public void setGreeting(String greeting)

  {

      _greeting = greeting;

      System.out.println("set greetingsuccess:"+_greeting);

  }

  public String hello()

  {

      return _greeting

  }

  public User getUser() {

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

  }

  }

  創建一個實現Serializableprojo 類也可以是Bean

  package app.demo;

  import java.io.Serializable;

  public class User implements Serializable{

  String userName ="snoopy";

  String password ="showme";

  public User(Stringuser, String pwd) {

      this.userName =user;

      this.password= pwd;

  }

  public StringgetUserName() {

      returnuserName;

  }

  public StringgetPassword() {

      returnpassword;

  }

  }

  接下來是配置web.xml

  <?xml version="1.0"encoding="UTF-8"?>

  <web-app version="2.4"

  xmlns="http://java.sun.com/xml/ns/j2ee"

  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

  xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee

  http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

  <servlet>

  <servlet-name>hello</servlet-name>

  <servlet-class>com.caucho.hessian.server.HessianServlet</servlet-class>

  <init-param>

  <param-name>service-class</param-name>

  <param-value>app.demo.BasicService</param-value>

  </init-param>

  </servlet>

  <servlet-mapping>

  <servlet-name>hello</servlet-name>

  <url-pattern>/hello</url-pattern>

  </servlet-mapping>

  </web-app>

  爲了測試可以在編輯一個簡單的test.jsp

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

  app.demo.BasicAPI"%>

  <%@page language="java"%>

  <%

  HessianProxyFactory factory = newHessianProxyFactory();

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

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

  out.println(url);

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

  %>

  將一切配置成功後,將項目發佈到web 服務器上去, 可以是TomcatRain 等等。

  進入

  結果如下:

  Hello: Hello, world

  Hello: snoopy

  Hello: showme

  說明服務器端已經編寫成功。

創建客戶端程序

      創建一個名爲HessianClientJAVAProject ,載入hessian.jar

  創建與服務器端一樣的接口,及基礎類

  public interface BasicAPI{

  public void setGreeting(Stringgreeting);

  public String hello();

      public User getUser();

  }

  import java.io.Serializable;

  public class User implements Serializable{

  String userName ="snoopy";

  String password ="showme";

  public User(Stringuser, String pwd) {

      this.userName =user;

      this.password= pwd;

  }

  public StringgetUserName() {

  returnuserName;

  }

  public StringgetPassword() {

  returnpassword;

  }

  }

  創建客戶端程序

  importcom.caucho.hessian.client.HessianProxyFactory;

  public class BasicClient {

  public static void main(String[] args)

  throwsException

  {

      String url ="http://127.0.0.1:8080/Hessian/hello";

      HessianProxyFactoryfactory = new HessianProxyFactory();

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

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

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

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

      basic.setGreeting("HelloGreeting");

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

  }

  }

  運行結果:

  Hello: Hello, world

  Hello: prance

  Hello: meshow

  Hello: Hello Greeting

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