Hessian的使用简介

2024-01-21 08:58
文章标签 使用 简介 hessian

本文主要是介绍Hessian的使用简介,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  Hessian:hessian是一个轻量级的remoting onhttp工具,使用简单的方法提供了RMI的功能,相比WebService,Hessian更简单、快捷。采用的是二进制RPC协议,因为采用了二进制协议,所以它很适合于发送二进制数据,Hessian主要作面向对象的消息通信。Hessian的初衷就是支持动态类型,格式紧凑,跨语言Hessian是使用自己的序列化机制实现的编组和反编组,其支持的数据类型是有限制的,不支持复杂的对象,可以穿透防火墙,在这里不得不说一下RMI:RMI是一组用户开发分布式应用程序的API。他使用的是java序列化机制实现调用及返回值的编组于反编组。它使用Java语言接口定义了远程对象,它集合了Java序列化和Java远程方法协议(Java Remote Method Protocol)。他可以被看做是RPC的Java版本,因为传统的RPC并不能很好的应用于分布式对象系统。而Java RMI则支持存储于不同地址空间的程序级对象之间彼此进行通信,实现远程对象之间的无缝远程调用。他也有它的缺点,他只能通过RMI协议来进行访问无法通过HTTP协议访问,无法穿透防火墙。
    还有一种远程调用方法就是HttpInvoker:他也是将参数和返回值通过Java的序列化机制进行编组和反编组,它具有RMI的支持所有可序列化对象的优点。试使用Http协议传输二进制流的,同时又具有Hessian、Burlap(传输xml文本)的优点。
二、写一个简单的hessian通信所需要知道写哪些内容?
Hessian:写一个Hessian需要注意的问题:
     1、JAVA服务器端必须具备以下几点:
        包含Hessian的jar包
        设计一个接口,用来给客户端调用
        实现该接口的动能
        配置web.xml,配置相应的servlet
        对象必须实现Serializable接口
        对于复杂对象可以使用Map的方法传递
     2、客户端必须具备以下几点:
        java客户端包含Hessian.jar包
        具有和服务器端结构一样的接口和实体类。包括命名空间都最好一样。利用HessianProxyFactory调用远程接口
三、简单hessian实例:
1、在服务端的接口:
public interface IHello {

    String sayHello();
   
}
2、在服务端的实现类:
public class IHelloImpl extends HessianServlet implements IHello {

    @Override
    public String sayHello() {
        // TODO Auto-generated method stub
        return "Hello,I from HessianService";
    }

}
3、在客户端的类:
public class ClientTest {

    public static String url = "http://127.0.0.1:8080/HessianService/Hello";
    public static void  main(String[] args){
        HessianProxyFactory factory = new HessianProxyFactory();
        try {
            IHello iHello = (IHello) factory.create(IHello.class, url);
            System.out.println(iHello.sayHello());
        } catch (MalformedURLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}
3、先将服务器端的类link到客户端,或者是将服务器端打包放到客户端,
4、在web.xml中进行配置:
服务器端: <servlet>
    <servlet-name>Hello</servlet-name>
    <servlet-class>com.caucho.hessian.server.HessianServlet</servlet-class>
    <init-param>
      <param-name>home-class</param-name>
      <param-value>com.kcpt.hessian.service.IHelloImpl</param-value>
    </init-param>
    <init-param>
      <param-name>home-api</param-name>
      <param-value>com.kcpt.hessian.service.IHello</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>Hello</servlet-name>
    <url-pattern>/Hello</url-pattern>
  </servlet-mapping>

执行成功:输出Hello,I from HessianService,这是简单的hessian实现方式,看起来比较简单

Hessian与Spring集成

说明 :

1.    讲述如何配置Hessian的服务器端(与Spring集成).

2.    讲述客户端如何调用

①   使用HessianProxyFactory  Hessian代理工厂直接调用

②   使用HessianProxyFactoryBean Hessian代理工厂Bean来完成接口调用.

 

1.    讲述如何配置Hessian的服务器端(与Spring集成).

 

 

 

 

 

接口定义类: com.wtang.isay. Isay:

 

[java]  view plain copy
  1. package com.wtang.isay;  
  2.   
  3. public interface Isay {  
  4.     public String sayHello(String arg1,String arg2);  
  5. }  

 

接口具体实现类: com.wtang.isay. IsayImpl

[java]  view plain copy
  1. package com.wtang.isay;  
  2.   
  3. public class IsayImpl implements Isay {  
  4.   
  5.     public String sayHello(String arg1, String arg2) {  
  6.         return "Hello:" + arg1 + arg2;  
  7.     }  
  8. }  

配置Web.xml:

[java]  view plain copy
  1. <servlet>  
  2.     <servlet-name>remote</servlet-name>  
  3.     <!-- 使用Spring的代理Servlet -->  
  4.     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  
  5.     <init-param>  
  6.         <param-name>namespace</param-name>  
  7.         <param-value>classes/remote-servlet</param-value>  
  8.     </init-param>  
  9.     <load-on-startup>1</load-on-startup>  
  10. </servlet>  
  11.   
  12. <servlet-mapping>  
  13.     <servlet-name>remote</servlet-name>  
  14.     <url-pattern>/remote/*</url-pattern>  
  15. </servlet-mapping>  

配置remote-servlet.xml[该文件位于src目录下,即编译后存在与classes下]:

[java]  view plain copy
  1. <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">  
  2. <beans>  
  3.     <!-- 接口的具体实现类 -->  
  4.     <bean id="impl" class="com.wtang.isay.IsayImpl" />  
  5.     <!-- 使用Spring的HessianServie做代理 -->  
  6.     <bean name="/helloSpring"  
  7.     class="org.springframework.remoting.caucho.HessianServiceExporter">  
  8.         <!-- service引用具体的实现实体Bean-->  
  9.         <property name="service" ref="impl" />  
  10.         <property name="serviceInterface" value="com.wtang.isay.Isay" />  
  11.     </bean>  
  12.       
  13.     <!-- 可以配置多个HessianServiceExporter代理Bean -->  
  14. </beans>  

注:

      这个文件为什么叫remote-servlet.xml呢?

因为我们在web.xml中有配置:<servlet-name>remote</servlet-name>。

所以remote-servlet.xml的文件名必须以

<servlet-name>中配置的servlet-name作为文件名的开头,

且文件名的格式必须是[servlet-name]-servlet.xml格式,否则检测不到。

    即:

<param-value>classes/remote-servlet</param-value>

所以文件名为remote-servlet.xml。

 

 

2.    讲述客户端如何调用

        ① 使用HessianProxyFactory  Hessian代理工厂直接调用

 即:

       

[java]  view plain copy
  1. package com.wtang.test;  
  2.   
  3. import java.net.MalformedURLException;  
  4. import com.caucho.hessian.client.HessianProxyFactory;  
  5. import com.wtang.isay.Isay;  
  6.   
  7. public class NormalClient {  
  8.     public static void main(String[] args) throws MalformedURLException {  
  9.         //Spring Hessian代理Servelet  
  10.         String url = "http://localhost:8080/HessianSpring/remote/helloSpring";  
  11.         HessianProxyFactory factory = new HessianProxyFactory();  
  12.         Isay api = (Isay) factory.create(Isay.class, url);  
  13.   
  14.         System.out.println(api.sayHello("chen""weitang"));  
  15.     }  
  16. }  

 

输出Hello:chenweitang

 

2.    讲述客户端如何调用

        ② 使用HessianProxyFactoryBean Hessian代理工厂Bean来完成接口调用.

配置客户端 remote-client.xml:

[java]  view plain copy
  1. <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">  
  2. <beans>  
  3.     <!-- 客户端Hessian代理工厂Bean -->  
  4.     <bean id="clientSpring" class="org.springframework.remoting.caucho.HessianProxyFactoryBean">  
  5.         <!-- 请求代理Servlet路径 -->          
  6.         <property name="serviceUrl">  
  7. <value>http://localhost:8080/HessianSpring/remote/helloSpring</value>  
  8.         </property>  
  9.         <!-- 接口定义 -->  
  10.         <property name="serviceInterface">  
  11.             <value>com.wtang.isay.Isay</value>  
  12.         </property>  
  13.     </bean>  
  14. </beans>  

 

调用:

[java]  view plain copy
  1. package com.wtang.test;  
  2.   
  3. import org.springframework.context.ApplicationContext;  
  4. import org.springframework.context.support.ClassPathXmlApplicationContext;  
  5. import com.wtang.isay.Isay;  
  6.   
  7. public class SpringClient {  
  8.     public static void main(String[] args) {  
  9.         ApplicationContext contex = new ClassPathXmlApplicationContext(  
  10.                 "remote-client.xml");  
  11.   
  12.         // 获得客户端的Hessian代理工厂bean  
  13.         Isay i = (Isay) contex.getBean("clientSpring");  
  14.         System.out.println(i.sayHello("chen""weitang"));  
  15.     }  
  16. }  

 

输出Hello:chenweitang

 

 

 

这篇关于Hessian的使用简介的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/628997

相关文章

SpringBoot中使用Flux实现流式返回的方法小结

《SpringBoot中使用Flux实现流式返回的方法小结》文章介绍流式返回(StreamingResponse)在SpringBoot中通过Flux实现,优势包括提升用户体验、降低内存消耗、支持长连... 目录背景流式返回的核心概念与优势1. 提升用户体验2. 降低内存消耗3. 支持长连接与实时通信在Sp

python使用库爬取m3u8文件的示例

《python使用库爬取m3u8文件的示例》本文主要介绍了python使用库爬取m3u8文件的示例,可以使用requests、m3u8、ffmpeg等库,实现获取、解析、下载视频片段并合并等步骤,具有... 目录一、准备工作二、获取m3u8文件内容三、解析m3u8文件四、下载视频片段五、合并视频片段六、错误

gitlab安装及邮箱配置和常用使用方式

《gitlab安装及邮箱配置和常用使用方式》:本文主要介绍gitlab安装及邮箱配置和常用使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1.安装GitLab2.配置GitLab邮件服务3.GitLab的账号注册邮箱验证及其分组4.gitlab分支和标签的

SpringBoot3应用中集成和使用Spring Retry的实践记录

《SpringBoot3应用中集成和使用SpringRetry的实践记录》SpringRetry为SpringBoot3提供重试机制,支持注解和编程式两种方式,可配置重试策略与监听器,适用于临时性故... 目录1. 简介2. 环境准备3. 使用方式3.1 注解方式 基础使用自定义重试策略失败恢复机制注意事项

nginx启动命令和默认配置文件的使用

《nginx启动命令和默认配置文件的使用》:本文主要介绍nginx启动命令和默认配置文件的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录常见命令nginx.conf配置文件location匹配规则图片服务器总结常见命令# 默认配置文件启动./nginx

在Windows上使用qemu安装ubuntu24.04服务器的详细指南

《在Windows上使用qemu安装ubuntu24.04服务器的详细指南》本文介绍了在Windows上使用QEMU安装Ubuntu24.04的全流程:安装QEMU、准备ISO镜像、创建虚拟磁盘、配置... 目录1. 安装QEMU环境2. 准备Ubuntu 24.04镜像3. 启动QEMU安装Ubuntu4

使用Python和OpenCV库实现实时颜色识别系统

《使用Python和OpenCV库实现实时颜色识别系统》:本文主要介绍使用Python和OpenCV库实现的实时颜色识别系统,这个系统能够通过摄像头捕捉视频流,并在视频中指定区域内识别主要颜色(红... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间详解

Windows下C++使用SQLitede的操作过程

《Windows下C++使用SQLitede的操作过程》本文介绍了Windows下C++使用SQLite的安装配置、CppSQLite库封装优势、核心功能(如数据库连接、事务管理)、跨平台支持及性能优... 目录Windows下C++使用SQLite1、安装2、代码示例CppSQLite:C++轻松操作SQ

Python常用命令提示符使用方法详解

《Python常用命令提示符使用方法详解》在学习python的过程中,我们需要用到命令提示符(CMD)进行环境的配置,:本文主要介绍Python常用命令提示符使用方法的相关资料,文中通过代码介绍的... 目录一、python环境基础命令【Windows】1、检查Python是否安装2、 查看Python的安

Python并行处理实战之如何使用ProcessPoolExecutor加速计算

《Python并行处理实战之如何使用ProcessPoolExecutor加速计算》Python提供了多种并行处理的方式,其中concurrent.futures模块的ProcessPoolExecu... 目录简介完整代码示例代码解释1. 导入必要的模块2. 定义处理函数3. 主函数4. 生成数字列表5.