java 异构数据_异构系统数据交互之Hessian
原标题:异构系统数据交互之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调用远程接口
三、编码实战
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;
/**
com.caucho
hessian
4.0.38
*/
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;
}
}
配置文件
hello
com.caucho.hessian.server.HessianServlet
service-class
com.service.impl.BasicService
hello
/hello
四、结果验证
(1004.9 KB)
描述: 服务端源码
下载次数: 3
(7.3 KB)
描述: 客户端源码
责任编辑:
还没有评论,来说两句吧...