首页 > 其他 > 详细

【异构系统数据交互之Hessian】

时间:2016-06-19 02:09:39      阅读:263      评论:0      收藏:0      [点我收藏+]

一、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调用远程接口

?

三、编码实战

? ? 1) 客户端

?

接口:

package cn.com.hession.hessiondemo;

public interface BasicAPI {

public void setGreeting(String greeting);

public String hello();

public UserVO getUser();

}

?

VO类:

package cn.com.hession.hessiondemo;

import java.io.Serializable;

public class UserVO implements Serializable {

? ? ? ?String userName = "";

? ? ? ?String password = "";

?

public UserVO(String user, String pwd) {

? ? ? ? ? ?this.userName = user;

? ? ? ? ? this.password = pwd;

}

public String getUserName() {

? ? ? ? ? return userName;

}

?

public String getPassword() {

? ? ? ? return password;

}

}

?

测试Main入口

package cn.com.hession.hessiondemo;

?

import com.caucho.hessian.client.HessianProxyFactory;

?

/**

<!-- http://mvnrepository.com/artifact/com.caucho/hessian -->

<dependency>

? ?<groupId>com.caucho</groupId>

? ?<artifactId>hessian</artifactId>

? ?<version>4.0.38</version>

</dependency>

?*/

public class App?

{

? ? public static void main( String[] args ) throws Exception

? ? {

? ? String url ="http://127.0.0.1:8080/HessianServer/hello";

? ? HessianProxyFactory factory = new HessianProxyFactory();

? ? BasicAPI basic = (BasicAPI) factory.create(BasicAPI.class, url);

? ? System.out.println("Hello:" + basic.hello());

? ? System.out.println("Hello:" + basic.getUser().getUserName());

? ? System.out.println("Hello:" + basic.getUser().getPassword());

? ? basic.setGreeting("Client Say : HelloGreeting");

? ? System.out.println("Hello:" + basic.hello());

? ? }

}

?

? ? ?

? ? 2)服务端

?

接口:

package com.service;

?

import cn.com.hession.hessiondemo.UserVO;

?

public interface BasicAPI {

public void setGreeting(String greeting);

public String hello();

public UserVO getUser();

}

?

接口实现类:

package com.service.impl;

?

import com.service.BasicAPI;

?

import cn.com.hession.hessiondemo.UserVO;

?

public class BasicService implements BasicAPI {

private String _greeting = "Hello, world";

?

public void setGreeting(String greeting) {

_greeting = greeting;

System.out.println("set greeting success:" + _greeting);

}

?

public String hello() {

return _greeting + ",Server Say";

}

?

public UserVO getUser() {

return new UserVO("Server Say: ?prance", "meshow");

}

}

?

VO类

package cn.com.hession.hessiondemo;

import java.io.Serializable;

public class UserVO implements Serializable {

? ? ?String userName = "snoopy";

? ? ?String password = "showme";

?

public UserVO(String user, String pwd) {

? ? ? this.userName = user;

? ? ? ?this.password = pwd;

}

?

public String getUserName() {

? ? ? ?return userName;

}

?

public String getPassword() {

? ? ? ? ? return password;

}

}

?

配置文件

?<servlet>

? <servlet-name>hello</servlet-name>

? <servlet-class>com.caucho.hessian.server.HessianServlet</servlet-class>

? <init-param>

? <param-name>service-class</param-name>

? <param-value>com.service.impl.BasicService</param-value>

? </init-param>

? </servlet>

??

? <servlet-mapping>

? <servlet-name>hello</servlet-name>

? <url-pattern>/hello</url-pattern>

? </servlet-mapping>

?

四、结果验证


bubuko.com,布布扣
?

?

?


bubuko.com,布布扣
?

?

?

?


bubuko.com,布布扣
?

?

项目源码

【异构系统数据交互之Hessian】

原文:http://gaojingsong.iteye.com/blog/2305587

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!