Hessian知识学习总结(二)——Hessian的helloworld

一、下载Hessian

        可在hessian官网http://hessian.caucho.com/ 或者http://download.csdn.net/detail/wodediqizhang/9543682下载jar包。
此处用的是hessian-4.0.3.jar

二、 搭建Hessian的Server

        2.1.新建一个web项目,HessianTest,如图1。将hessian-4.0.3.jar放在lib下。

        2.2.提供服务接口HessianService,代码如下:

 

[java] view plain copy
 
  1. package com.cn.wjztr.service;  
  2.   
  3. import com.cn.wjztr.model.HelloWorld;  
  4. /** 
  5.  *  
  6.  *  
  7.  * 类名称:HessianService 
  8.  * 类描述: 定义对外提供服务的接口 
  9.  * 创建人:wodediqizhang@163.com 
  10.  * 修改时间:2016-6-7 下午4:39:33 
  11.  * Modification History: 
  12.  * ============================================================================= 
  13.  *   Author         Date          Description 
  14.  *   ------------ ---------- --------------------------------------------------- 
  15.  *   ghb<span style="font-family: Arial, Helvetica, sans-serif;">                         2016-6-7        创建文档 </span> 
  16.  * ============================================================================= 
  17.  * @version 1.0.0 
  18.  * 
  19.  */  
  20. public interface HessianService {  
  21.   
  22.     public HelloWorld sayHelloWorld();  
  23. }  


        2.3.HessianService接口要使用HelloWorld对象,HelloWorld代码如下:

 

 

[java] view plain copy
 
  1. package com.cn.wjztr.model;  
  2.   
  3. import java.io.Serializable;  
  4.   
  5. public class HelloWorld implements Serializable{  
  6.   
  7.     /** 
  8.      * serialVersionUID:TODO(用一句话描述这个变量表示什么) 
  9.      * 
  10.      * @since 1.0.0 
  11.      */  
  12.     private static final long serialVersionUID = 2303638650074878501L;  
  13.     /** 
  14.      * 名字 
  15.      */  
  16.     private String name;  
  17.     public HelloWorld() {  
  18.           
  19.     }  
  20.     public HelloWorld(String name) {  
  21.          this.name = name;  
  22.     }  
  23.       
  24.     public String getName() {  
  25.         return name;  
  26.     }  
  27.     public void setName(String name) {  
  28.         this.name = name;  
  29.     }  
  30.   
  31. }  


        2.4.实现HessianService接口,实现类为HessianServiceImpl:

 

 

[java] view plain copy
 
  1. package com.cn.wjztr.service.impl;  
  2.   
  3. import com.cn.wjztr.model.HelloWorld;  
  4. import com.cn.wjztr.service.HessianService;  
  5. /** 
  6.  *  
  7.  *  
  8.  * 类名称:HessianServiceImpl 
  9.  * 类描述:对外提供服务的接口的实现 
  10.  * 创建人:<span style="font-family: Arial, Helvetica, sans-serif;">wodediqizhang@163.com</span> 
  11.  * 修改时间:2016-6-7 下午4:47:40 
  12.  * Modification History: 
  13.  * ============================================================================= 
  14.  *   Author         Date          Description 
  15.  *   ------------ ---------- --------------------------------------------------- 
  16.  *   ghb           2016-6-7        创建文档  
  17.  * ============================================================================= 
  18.  * @version 1.0.0 
  19.  * 
  20.  */  
  21. public class HessianServiceImpl implements HessianService {  
  22.       
  23.     @Override  
  24.     public HelloWorld sayHelloWorld() {  
  25.         // TODO Auto-generated method stub  
  26.         return new HelloWorld("hello,World");  
  27.     }  
  28.   
  29. }  


        2.5.配置web.xml,添加对HessianServlet的配置:

 

 

[java] view plain copy
 
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <web-app version="3.0"   
  3.     xmlns="http://java.sun.com/xml/ns/javaee"   
  4.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
  5.     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   
  6.     http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">  
  7.   <display-name></display-name>   
  8.   <welcome-file-list>  
  9.     <welcome-file>index.jsp</welcome-file>  
  10.   </welcome-file-list>  
  11.     
  12.    <servlet>  
  13.         <!-- 配置 HessianServlet,Servlet的命名任意-->  
  14.         <servlet-name>ServiceServlet</servlet-name>  
  15.         <servlet-class>com.caucho.hessian.server.HessianServlet</servlet-class>  
  16.           
  17.         <!-- 配置接口的具体实现类 ,param-name命名任意-->  
  18.         <init-param>  
  19.             <param-name>service-class</param-name>  
  20.             <param-value>com.cn.wjztr.service.impl.HessianServiceImpl</param-value>  
  21.         </init-param>  
  22.     </servlet>  
  23.     <!-- 映射 HessianServlet的访问URL地址-->  
  24.     <servlet-mapping>  
  25.         <servlet-name>ServiceServlet</servlet-name>  
  26.         <url-pattern>/ServiceServlet</url-pattern>  
  27.     </servlet-mapping>  
  28.     
  29. </web-app>  


        此时,Hessian Server的配置已经完成了,接下来将应用部署在tomcat并启动。访问链接http://127.0.0.1:8081/HessianTest/ServiceServlet,得到信息如下:

 

  

三、实现Hessian的client

        调用Hessian的客户端,创建HessianTestClient类,代码如下:

 

[java] view plain copy
 
  1. package com.cn.wjztr.controller;  
  2.   
  3. import java.net.MalformedURLException;  
  4.   
  5. import com.caucho.hessian.client.HessianProxyFactory;  
  6. import com.cn.wjztr.model.HelloWorld;  
  7. import com.cn.wjztr.service.HessianService;  
  8.   
  9.   
  10. /** 
  11.  *  
  12.  *  
  13.  * 类名称:HessianTestClient 
  14.  * 类描述: 
  15.  * 创建人:wodediqizhang@163.com 
  16.  * 修改时间:2016-6-7 下午4:57:11 
  17.  * Modification History: 
  18.  * ============================================================================= 
  19.  *   Author         Date          Description 
  20.  *   ------------ ---------- --------------------------------------------------- 
  21.  *   ghb            2016-6-20        创建文档  
  22.  * ============================================================================= 
  23.  * @version 1.0.0 
  24.  * 
  25.  */  
  26. public class HessianTestClient {  
  27.     public static void main(String[] args) {  
  28.     //在服务器端的web.xml文件中配置的HessianServlet映射的访问URL地址  
  29.     String url = "http://127.0.0.1:8081/HessianTest/ServiceServlet";   
  30.     HessianProxyFactory factory = new HessianProxyFactory();   
  31.     HessianService service = null;  
  32.     try {service = (HessianService) factory.create(HessianService.class, url);}   
  33.     catch (MalformedURLException e) {  
  34.         // TODO Auto-generated catch block  
  35.         e.printStackTrace();}  
  36.     //创建IService接口的实例对象   
  37.     HelloWorld helloWorld = service.sayHelloWorld();  
  38.     //调用Hessian服务器端的ServiceImpl类中的getUser方法来获取一个User对象   
  39.     System.out.println(helloWorld.getName());}}  
  40.     }  
  41. }  



 

 

 

[java] view plain copy
 
  1. <span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">        运行这个类,会得到“hello,World”信息:</span>  

 

后记:这篇博是借鉴了孤傲苍狼(http://www.cnblogs.com/xdp-gacl/p/3897534.html)这篇文章的内容实现的,不过他是将server和client分开,并将server的接口打了jar包给client,在client项目里面引用jar包里的接口实现对server的调用。这里我觉得理解原理就好,所以就我在这里就写一起了。

再后记:上个后记都说了借鉴,那这篇文章还设为转载吧。就这样。

 

### Hessian 概述 Hessian 是一种轻量级的二进制 Web 服务协议,由 Caucho Technology 开发。它允许不同编程语言编写的应用程序之间通过网络进行远程过程调用(RPC),具有跨语言、高性能、低带宽占用等特点。Hessian 使用二进制格式传输数据,相较于基于 XML 的协议(如 SOAP),数据传输量更小,解析速度更快。

核心特点

  1. 跨语言支持:Hessian 支持多种编程语言,如 Java、Python、Ruby 等,不同语言编写的服务可以通过 Hessian 进行通信。
  2. 二进制协议:采用二进制格式编码数据,比 XML 等文本格式更紧凑,传输效率更高。
  3. 简单易用:提供了简洁的 API,开发人员可以方便地实现远程调用。

工作原理

Hessian 的工作原理主要包括以下几个步骤:

  1. 服务定义:定义服务接口和实现类,描述服务的功能和方法。
  2. 服务发布:将服务实现类发布为 Hessian 服务,通过网络暴露服务接口。
  3. 服务调用:客户端通过 Hessian 代理调用远程服务,将请求数据编码为二进制格式发送到服务器。
  4. 服务处理:服务器接收到请求后,解码数据,调用相应的服务方法,并将结果编码为二进制格式返回给客户端。
  5. 结果返回:客户端接收到服务器返回的结果后,解码数据并得到最终结果。

举例说明(Java 环境)

1. 定义服务接口

首先,定义一个简单的服务接口,例如一个计算器服务:

// CalculatorService.java
public interface CalculatorService {
    int add(int a, int b);
}

2. 实现服务接口

实现上述定义的服务接口:

// CalculatorServiceImpl.java
public class CalculatorServiceImpl implements CalculatorService {
    @Override
    public int add(int a, int b) {
        return a + b;
    }
}

3. 服务端代码(使用 Spring Boot)

使用 Spring Boot 发布 Hessian 服务:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.remoting.caucho.HessianServiceExporter;

@SpringBootApplication
public class HessianServerApplication {
    public static void main(String[] args) {
        SpringApplication.run(HessianServerApplication.class, args);
    }

    @Bean(name = "/calculator")
    public HessianServiceExporter hessianServiceExporter() {
        HessianServiceExporter exporter = new HessianServiceExporter();
        exporter.setService(new CalculatorServiceImpl());
        exporter.setServiceInterface(CalculatorService.class);
        return exporter;
    }
}

在上述代码中,通过 HessianServiceExporterCalculatorServiceImpl 服务暴露为 Hessian 服务,访问路径为 /calculator

4. 客户端代码

客户端通过 Hessian 代理调用远程服务:

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

public class HessianClient {
    public static void main(String[] args) {
        String url = "http://localhost:8080/calculator";
        HessianProxyFactory factory = new HessianProxyFactory();
        try {
            CalculatorService calculatorService = (CalculatorService) factory.create(CalculatorService.class, url);
            int result = calculatorService.add(2, 3);
            System.out.println("2 + 3 = " + result);
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }
    }
}

在客户端代码中,使用 HessianProxyFactory 创建一个 CalculatorService 的代理对象,通过该代理对象调用远程服务的 add 方法。

总结

Hessian 是一种高效的远程过程调用协议,适用于不同语言编写的应用程序之间的通信。通过简单的接口定义和服务发布,就可以实现跨语言的远程调用,提高系统的可扩展性和灵活性。

posted @   皇问天  阅读(387)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示