转载 hessian学习总结

转载

孤傲苍狼

http://www.cnblogs.com/xdp-gacl/p/3897534.html

只为成功找方法,不为失败找借口!

Hessian学习总结(一)——Hessian入门

一、远程通讯协议的基本原理

  网络通信需要做的就是将流从一台计算机传输到另外一台计算机,基于传输协议和网络 IO 来实现,其中传输协议比较出名的有 http 、tcp 、 udp 等等, http 、 tcp 、 udp 都是在基于 Socket 概念上为某类应用场景而扩展出的传输协议,网络IO ,主要有 bio 、 nio 、 aio三种方式,所有的分布式应用通讯都基于这个原理而实现,只是为了应用的易用,各种语言通常都会提供一些更为贴近应用易用的应用层协议。

二、应用级协议Binary-RPC

  Binary-RPC(RemoteProcedure Call Protocol,远程过程调用协议)是一种和RMI(Remote MethodInvocation,远程方法调用)类似的远程调用的协议,它和RMI的不同之处在于它以标准的二进制格式来定义请求的信息 ( 请求的对象、方法、参数等 ),这样的好处是什么呢,就是在跨语言通讯的时候也可以使用。

  Binary -RPC协议的一次远程通信过程:

  1 、客户端发起请求,按照Binary -RPC 协议将请求信息进行填充;

  2、填充完毕后将二进制格式文件转化为流,通过传输协议进行传输;

  3、接收到在接收到流后转换为二进制格式文件,按照 Binary -RPC 协议获取请求的信息并进行处理;

  4 、处理完毕后将结果按照Binary -RPC 协议写入二进制格式文件中并返回。

问题总结:

  1、传输的标准格式是标准格式的二进制文件。

  2、怎么样将请求转化为传输的流?将二进制格式文件转化为流。

  3、怎么接收和处理流?通过监听的端口获取到请求的流,转化为二进制文件,根据协议获取请求的信息,进行处理并将结果写入 XML中返回。

  4、传输协议是?http

三、Hessian介绍

Hessian是一个轻量级的remoting on http工具,采用的是BinaryRPC协议,所以它很适合于发送二进制数据,同时又具有防火墙穿透能力。Hessian一般是通过Web应用来提供服务,因此非常类似于平时我们用的WebService。只是它不使用SOAP协议,但相比webservice而言更简单、快捷。

Hessian官网:http://hessian.caucho.com/

Hessian 可通过Servlet提供远程服务,需要将匹配某个模式的请求映射到Hessian服务。也可Spring框架整合,通过它的DispatcherServlet可以完成该功能,DispatcherServlet可将匹配模式的请求转发到Hessian服务。Hessian的server端提供一个servlet基类,用来处理发送的请求,而Hessian的这个远程过程调用,完全使用动态代理来实现的,,建议采用面向接口编程,Hessian服务通过接口暴露。

Hessian处理过程示意图:客户端——>序列化写到输出流——>远程方法(服务器端)——>序列化写到输出流——>客户端读取输入流——>输出结果

Hessian入门范例

4.1下载Hessian

  去Hessian官网:http://hessian.caucho.com/下载最新的Hessian包,如下图所示:

  

  下载完成之后,得到如下图所示的jar文件

  

4.2、搭建Hessian测试服务端web项目

  新建一个名为HessianServer的webproject。将hessian-4.0.37.jar放入WEB-INF/lib文件夹中,如下图所示:

  

  在进行基于Hessian的项目开发时,应当注意以下几点:

  JAVA服务器端必须具备以下几点:

  1. 包含Hessian的jar包。
  2. 设计一个接口,用来给客户端调用。
  3. 实现该接口的功能。
  4. 配置web.xml,配好相应的servlet。
  5. 对象必须实现Serializable 接口。
  6. 对于复杂对像可以使用Map的方法传递。

  客户端必须具备以下几点:

  1. java客户端包含Hessian.jar的包。
  2. 具有和服务器端结构一样的接口。
  3. 利用HessianProxyFactory调用远程接口。

4.3、设计一个提供服务接口来给客户端调用

IService接口的代码如下:

复制代码
 1 package gacl.hessian.service;
 2 
 3 import gacl.hessian.model.User;
 4 
 5 
12 public interface IService {
13 
14     
20     public User getUser();
21 }
复制代码

  IService接口中用到了一个User类

User类的代码如下:

复制代码
 1 package gacl.hessian.model;
 2 
 3 import java.io.Serializable;
 4 
 5 
14 public class User implements Serializable{
15 
16     private static final long serialVersionUID = 1692800630322115854L;
17     //name属性
18     private String name;
19 
20     public User() {
21         
22     }
23 
24     public User(String name) {
25         this.name = name;
26     }
27 
28     public String getName() {
29         return name;
30     }
31 
32     public void setName(String name) {
33         this.name = name;
34     }
35     
36     
37 }
复制代码

4.4、编写IService接口的具体实现类

  ServiceImpl实现类的代码如下:

复制代码
 1 package gacl.hessian.service.impl;
 2 
 3 import gacl.hessian.model.User;
 4 import gacl.hessian.service.IService;
 5 
 6 
13 public class ServiceImpl implements IService {
14 
15     
22     public User getUser() {
23         return new User("孤傲苍狼");
24     }
25 }
复制代码

4.5、配置web.xml,添加对HessianServlet的配置

如下面的红色部分所示:

复制代码
 1 
 2  3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
 5     http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
 6     
 7         index.jsp
 8     
 9 
10     11 12 ServiceServlet 13 com.caucho.hessian.server.HessianServlet 14 15 16 17 service-class 18 gacl.hessian.service.impl.ServiceImpl 19 20 
21     
22     
23         ServiceServlet
24         /ServiceServlet
25     
26 
27 
复制代码

   到此,Hessian的服务端编写就算是完成了。

  配置完成之后,启动项目,在地址栏输入:http://localhost:端口号/项目名/ServiceServlet,如果显示结果如下,说明配置和接口编写正确:

  Hessian Requires POST

  

4.6、编写Hessian的测试客户端

  新建一个HessianTestClient的普通Java项目作为测试客户端,需引入上述的hessian-4.0.37.jar,还需要服务端导出IService和User两个类的jar,放入lib。或创建两个一摸一样的类,这里是采用将服务端的IService和User两个类打包成jar包提供给客户端进行调用,打成Jar包的过程如下图所示:

选中要打包的类

  这样就将IService类和User类打包成了一个Hessian_Common.jar包,如下图所示:

 

  创建好的HessianTestClient工程如下所示:

  

  HessianTestClient项目引入上述的hessian-4.0.37.jar和IService和User两个类的jar,编写HessianClient客户端,HessianClient类的代码如下所示:

复制代码
 1 package hessian.test.client;
 2 
 3 import java.net.MalformedURLException;
 4 
 5 import gacl.hessian.model.User;
 6 import gacl.hessian.service.IService;
 7 
 8 import com.caucho.hessian.client.HessianProxyFactory;
 9 
10 
17 public class HessianClient {
18 
19     public static void main(String[] args) throws MalformedURLException {
20         
38         //在服务器端的web.xml文件中配置的HessianServlet映射的访问URL地址
39         String url = "http://192.168.1.144:8080/HessianServer/ServiceServlet";
40         HessianProxyFactory factory = new HessianProxyFactory();
41         IService service = (IService) factory.create(IService.class, url);//创建IService接口的实例对象
42         User user = service.getUser();//调用Hessian服务器端的ServiceImpl类中的getUser方法来获取一个User对象
43         System.out.println(user.getName());
44     }
45 }
复制代码

  将HessianServer项目部署到tomcat服务器,启动tomcat服务器,然后运行HessianClient客户端,运行结果如下:

  

  从运行结果中可以看到,在HessianClient客户端中已经成功获取到远程的HessianServer服务器端传输过来的User对象,然后打印出User对象的名字。

  以上就是Hessian的一个入门级别的案例!

4.7、测试项目下载

  Hessian服务端:HessianServer,Hessian测试客户端:HessianTestClient

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值