`
starbhhc
  • 浏览: 649155 次
  • 性别: Icon_minigender_2
  • 来自: 深圳
社区版块
存档分类
最新评论

3、使用Hessian技术Demo

 
阅读更多

学习使用Hessian协议远程调用

 

学习背景:

          用到hessian是一年前的一个项目,需求需要有个客户端和服务器端,客户端是安装于客户机器上,然而,客户端还得调用服

务器端的方法,第一次念头是使用Ajax跨域调用。

可惜,原来使用ajax不跨域调用方法传参参数长度有限制(大约估计3000多就最大值了),查官网,Google都没结果,果断放弃。

又想到webService调用,但是Google很多人推荐使用Hessian,稳定、效率快,通过前面的2篇文章,已经对hessian有了初步的了解,

下面开始实现demo

 

开始建立Demo_1

 

1. 在服务端和客户端都导入jar包,我使用的是hessian-4.0.37.jar。 

    注意:在看别人的学习笔记的时候,很多人都说jar版本不同引起的问题很多,比如:方法没找着等、自己注意这个jar问题

2. 在服务端搭建

         2.1 首先你得建立一个接口,IHessianService.java

public   interface   IHessianService{

 

 

    public String hello(User  user);

          2.2 实现刚刚建立接口的实现类 HessianServiceImpl.java

public   class    HessianServiceImpl implements  IHessianService{

    public String hello(User   user) {

       /** 业务逻辑处理   */

 

    }

        2.3 User实体表

public     classUser  implements    java.io.Serializable  {

//<span style="font-size:14px;BACKGROUND-COLOR: #f0f0f0">如果在远程调用时,用到了自定义的实体,必须序列化</span>

 

   private  static    final   long serialVersionUID = 1L; //<span style="font-size:14px;">必须加上</span>   

   private String id ;

/** default constructor */

    public   User () {             //<span style="font-size:14px;">空的构造器也必须加上</span>

 

     }

     // Property accessors

    public String getId() {

 

       returnthis.id;

 

    }

 

    public  void setId(String id) {

       this.id = id;

    }

 

 

 

 2.4 上面都把调用后的程序接口和实现类都写完,那么下面该配置web.xml文件.在原有的Web.xml文件中添加下面代码

<!-- 使用Hessian远程访问:配置拦截 -->

 

     <servlet>

        <servlet-name>synchLocalhost</servlet-name>                                                      //自定义名称

        <servlet-class>com.caucho.hessian.server.HessianServlet </servlet-class>   //这个是调用jar里面的Hessian拦截器,不需要更改

        <init-param>

          <param-name>home-class</param-name>                                                            //这个是Hessian拦截器后跳转的实现类标识符,不需要更改          

         <param-value>com.estone.www.aqjgws.synchronism.hessian.impl. HessianServiceImpl</param-value>  //自定义Hessian的实现类的全路径

        </init-param>

        <init-param>

          <param-name>home-api</param-name>                               //这个是Hessian拦截器后跳转的接口标识符,不需要更改

          <param-value>com.estone.www.aqjgws.synchronism.hessian. IHessianService</param-value>//自定义Hessian的接口类的全路径

        </init-param>

        <load-on-startup>1</load-on-startup>

      </servlet>

      <servlet-mapping>

              //servlet-name:与前面的一致

             // url-pattern :访问入口名 客户端通过访问入口进入服务器中Hessian拦截器,拦截后跳转到自定义的实现类中方法处理

        <servlet-name>synchLocalhost</servlet-name>

        <url-pattern>/synchLocalhost</url-pattern>

 

      </servlet-mapping>

到这,服务端相关配置就完成了。

3. 客户端配置

3.1 拷贝服务端的接口类和自定义使用的实体类User.java

  注意:实体类的路径必须得和服务器中的路径一样,不然,会报实体找不着错误

3.2

/**  ----------使用Hessian调取网络服务器中接口  ---------  */

 

    HessianProxyFactory factory = new HessianProxyFactory() ; //<span style="font-size:14px;">创建<span style="font-family:Calibri;">Hessian</span>代理对象</span>

 

 

<span style="font-size:12px;">    //服务器地址,<span style="BACKGROUND-COLOR: #f0f0f0"><span style="color:black;">aqjgws</span><span style="color:black;">是我测试的服务器项目名</span></span></span><p><span style="font-size:12px;"><span style="color:black;">&nbsp;&nbsp;&nbsp;&nbsp;//synchLocalhost</span><span style="font-family:Calibri;">&nbsp;</span><span style="color:black;">是服务器</span><span style="color:black;">Web.xml</span><span style="color:black;">文件中配置的</span><span style="color:black;">uerl</span><span style="color:black;">访问入口</span></span></p><p><span style="font-size:12px;"><span style="color:black;">&nbsp;&nbsp;&nbsp; //通过创建了</span><span style="color:black;">Hessian</span><span style="color:black;">接口对象就可以使用接口对象调用该接口中的方法</span></span></p>

    IHessianService synchronism = (IHessianService) factory.create             (IHessianService.class, “http://192.168.0.99:8092/aqjgws/synchLocalhost”);

<span style="font-size:14px;">   </span>             

 

String name  = synchronism.hello(new User(“123456”));

到这里,Demo_1就完成了。

Demo_1有几个问题:

1. 没有和Spring配置上,也就是说不能使用Spring管理的Hibernate等对象操作

2. 只能跳转到一个Hessian的接口类中。

 

注意:

1. Hessian远程调用方法中,客户端中的接口类必须和服务器中的接口类一样,方法名称也一样

2. 在接口类中,不要写重构的方法,Hessian不能识别重构的方法。

3. 方法参数中,如果有自定义实体对象entity,则有以下几注意点:

                 a  entitypackage名必须同服务器上的package,否则会在服务端上报找不到此类

                 b  entity必须是可序列化的,如果是组合对象,则可序列化应该可递归下去,除非不需要组合

     4. 方法返回值中,如果有自定义对象,同2,如果是集合对象,则为List(lists and arrays) & map(maps and dictionaries)

     5. Hessian 不支持文件传输,如需要文件传输,则传递数据流实现(下一文档说明)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    Hessian学习简单demo

    在这个简单的demo中,我们将探讨Hessian的核心概念,以及如何在实际应用中使用它。 首先,我们需要理解什么是数据序列化。数据序列化是将对象的状态转化为可存储或传输的形式的过程。在Hessian中,这个过程使得Java...

    spring aop hessian 基础demo 部署即可运行

    Spring AOP和Hessian是两个在Java开发中广泛使用的技术,尤其在分布式系统和服务治理中。下面将详细解释这两个概念以及它们如何结合使用。 **Spring AOP(面向切面编程)** Spring AOP是Spring框架的一个重要组成...

    hessian demo 包括服务端和客户端

    **标签中的“hessian”和“java”**表明这是关于Java平台上的Hessian技术。Hessian是跨语言的,但在这个例子中,我们专注于Java环境下的应用。 此外,Hessian还支持版本控制,这意味着即使服务端接口发生变化,只要...

    Hessian远程调用RPC最简单demo

    3. **发布服务**:使用Hessian的ServerBinder类,将服务实例绑定到特定的URL,使得客户端可以通过网络调用该服务。 ```java Server server = new HessianServer(new URL("http://localhost:8080/hello"), new ...

    Hessian RPC-RMI技术 整合Structs Spring Hibernate Ibatis

    本文主要讨论的是如何将Hessian RPC与RMI技术整合到Structs、Spring、Hibernate和Ibatis这四个关键的Java开发框架中,以构建一个高效、灵活的分布式应用程序。 1. **Hessian配置说明**: Hessian的配置通常涉及...

    基于python的Hessian Frangi滤波算法设计与实现

    在图像处理领域,Hessian Frangi滤波算法是一种用于血管检测和结构分析的高级技术,尤其在医学成像中有着广泛的应用。它基于Hessian矩阵,可以有效地检测图像中的线性和圆状结构。本篇文章将深入探讨如何使用Python...

    spring springmvc hessian rpc客户端及服务端示例demo

    在IT行业中,RPC(Remote Procedure Call,远程过程调用)是一种常见的分布式系统通信技术,它使得应用程序可以在不关心网络...同时,对于追求高性能服务间通信的开发者,Hessian提供了一个高效且易于使用的解决方案。

    Hessian远程调用框架学习一

    接下来,我们看下如何使用Hessian创建一个简单的Java demo: 1. **创建服务端** 在服务端,你需要定义一个提供给客户端调用的接口和服务实现。例如,我们可以定义一个`Calculator`接口: ```java public ...

    hessian+spring

    ### Hessian与Spring整合知识点详解 #### 一、Hessian简介 ...通过本文的介绍,相信读者已经掌握了如何使用Hessian与Spring集成的基本步骤和技术要点。在实际项目开发中,还需要根据具体需求进行更深入的研究和实践。

    CXF+RMI+HESSIAN

    在这个过程中,文件“JdbcDemo”可能是演示如何使用CXF、RMI和Hessian来实现数据库操作的示例代码。它可能包含了服务接口定义、服务实现、CXF配置、客户端代理生成和调用的代码片段。通过阅读和分析这个示例,你可以...

    Java安全相关的漏洞和技术demo

    Java安全相关的漏洞和技术demo,原生Java、Fastjson、Jackson、Hessian2、XML反序列化漏洞利用和Spring、Dubbo、Shiro、CAS、Tomcat、RMI、Nexus等框架\中间件\功能的exploits以及Java Security Manager绕过、Dubbo-...

    Java全相关的漏洞以及技术demo(完整项目及相关代码)

    原生Java、Fastjson、Jackson、Hessian2、XML反序列化漏洞利用和Spring、Dubbo、Shiro、CAS、Tomcat、RMI、Nexus等框架\中间件\功能的exploitsJava Security Manager绕过、Dubbo-Hessian2安全等实践代码。...

    dubbo-demo项目源码

    【标签】"dubbo"是该项目的核心技术,它是基于Java的RPC框架,支持多种协议如HTTP、Hessian、RMI等,以及多种通信框架如Netty、MINA。"demo"表明这是演示性质的代码,用于快速上手和理解。"demo"标签重复,强调了这...

    特征点匹配Demo

    在本"特征点匹配Demo"中,我们主要关注如何使用OpenCV库来实现这一功能,特别是通过SURF(Speeded Up Robust Features)算法进行特征点检测和匹配。 OpenCV是一个强大的开源计算机视觉库,提供了丰富的功能,包括...

    demo工程列表说明1

    3. **Beetl模板引擎**:beetl2demo展示了如何使用Beetl模板引擎,它是一种用于生成动态内容的工具,常见于MVC框架中,如Spring MVC。 4. **C3P0数据库连接池**:c3p0demo用于演示C3P0数据库连接池的使用,数据库...

    springmvc+dubbo+mybatis+zookeeper可以直接使用的框架demo

    这个框架Demo提供了基于以上技术栈的快速启动模板,可以帮助开发者快速搭建微服务架构,理解各个组件的交互方式。在实际项目中,可以根据需求进一步定制服务治理策略,如添加熔断机制、调用链追踪等。此外,还可以...

    dubboDemo新手教学

    本教学将引导你逐步了解并掌握Dubbo的核心概念和技术。 【标签】:dubbo,demo,教学 【知识点详解】: 1. **Dubbo介绍**: Dubbo是阿里巴巴开源的分布式服务框架,旨在提高应用的可扩展性和松耦合性。它基于...

    dubbo demo

    【标题】"dubbo demo" 是一个基于Dubbo框架的示例项目,旨在演示如何配置和使用Dubbo服务端和客户端。Dubbo是中国阿里巴巴开源的一款高性能、轻量级的Java远程服务调用框架,它提供了服务治理、负载均衡、容错机制等...

    java rpc_demo

    项目中可能有自定义的序列化和反序列化工具类,或者使用已有的库,如Hessian、protobuf或Fastjson。 5. **网络通信**:RPC框架负责实际的网络通信,如HTTP、TCP/IP等。这部分可能涉及NIO或Netty等高性能的网络库。 ...

    burlap-spring-demo

    Burlap是一个轻量级的XML RPC协议 这使得他可以移植到任何可以解析XML的语言中 比起Hessian 它的可读性更强 和其他基于Xml的远程技术(如SOAP和XML RPC)不同 它的消息结构尽可能简单 不需要额外的外部定义语言 如...

Global site tag (gtag.js) - Google Analytics