Hessian--輕量級遠程調用方案

一,Hessian基礎概念java

Hessian 是由 caucho 提供的一個基於 binary-RPC 實現的遠程通信 library.Binary-RPC 是一種和 RMI 相似的遠程調用的協議,它和 RMI 的不一樣之處在於它以標準的二進制格式來定義請求的信息 ( 請求的對象、方法、參數等 ) ,這樣的好處就是在跨語言通信的時候也能夠使用。web

 Binary -RPC 協議的一次遠程通訊過程:api

1 、客戶端發起請求,按照 Binary -RPC 協議將請求信息進行填充;服務器

2 、填充完畢後將二進制格式文件轉化爲流,經過傳輸協議進行傳輸;app

3 、接收到在接收到流後轉換爲二進制格式文件,按照 Binary -RPC 協議獲取請求的信息並進行處理;ide

4 、處理完畢後將結果按照 Binary -RPC 協議寫入二進制格式文件中並返回工具

總結:hessian是一個輕量級的remoting onhttp(基於http傳輸協議)工具,使用簡單的方法提供了RMI的功能url

二,代碼實現spa

參照官網(http://hessian.caucho.com/#IntroductiontoHessian)上的介紹,一個Hessian的服務建立有如下幾個步驟..net

Creating a Hessian service using Java has four steps:

一、Create an Java interface as the public API
二、Create a client using HessianProxyFactory
三、Create the Service implementation class
四、Configure the service in your servlet engine.

首先下載hessian-4.0.37.jar,服務端和客戶端都要用的。

<dependency>
      <groupId>com.caucho</groupId>
      <artifactId>hessian</artifactId>
      <version>3.1.5</version>
    </dependency>

版本根據需求自行更改

server端:

package com.chuyu.demo;

public interface IBasic {
    public  String sayHello();
}
package com.chuyu.demo;


public class BasicImpl  implements  IBasic {
    private String helloStr = "Hello, world";
    @Override
    public String sayHello() {
        return helloStr;
    }
}

web.xml中添加servlet:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
    <display-name>Archetype Created Web Application</display-name>

    <servlet>
        <servlet-name>hello-hessian</servlet-name>
        <servlet-class>com.caucho.hessian.server.HessianServlet</servlet-class>
        <init-param>
            <param-name>home-class</param-name>
            <param-value>com.chuyu.demo.BasicImpl</param-value>
        </init-param>
        <init-param>
            <param-name>home-api</param-name>
            <param-value>com.chuyu.demo.IBasic</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>hello-hessian</servlet-name>
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>

在web.xml裏,BasicService是經過home-class和home-api兩個參數傳遞給HessianServlet,而後將HessianServlet配置到web.xml的<servlet>裏來實現服務配置到容器的。

客戶端:

package com.chuyu.demo;

public interface IBasic {
    public  String sayHello();
}

調用類:

package com.chuyu.demo;

    import com.caucho.hessian.client.HessianProxy;
    import com.caucho.hessian.client.HessianProxyFactory;
    import java.net.MalformedURLException;

    public class HessianClient {
        public static void main(String[] args) {
             String uslStr="http://localhost:8080/hello";
    //         String hessian_url="http://localhost:8080//demo-hessian";
            HessianProxyFactory factory=new HessianProxyFactory();
            try {
                IBasic iBasic =(IBasic)factory.create(IBasic.class,uslStr);
    //            IBasic iBasic_hessian =(IBasic)factory.create(IBasic.class,hessian_url);
                System.out.println(iBasic.sayHello());
    //            System.out.println(iBasic_hessian.sayHello());
            } catch (MalformedURLException e) {
                e.printStackTrace();
            }

        }

    }

一般狀況下,編寫客戶端程序須要依賴服務器提供的客戶端jar(即提供接口類)

相關文章
相關標籤/搜索