hessian非常好的入门与实例教程
hessian是一个轻量级的remoting on http工具,使用简单的方法提供了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是一个轻量级的remoting on http工具,采用的是Binary RPC协议,所以它很适合于发送二进制数据,同时又具有防火墙穿透能力。Hessian一般是通过Web应用来提供服务,因此非常类似于平时我们用的WebService。只是它不使用SOAP协议,但相比webservice而言更简单、快捷。
Hessian官网:http://hessian.caucho.com/Hessian可通过Servlet提供远程服务,需要将匹配某个模式的请求映射到Hessian服务。也可Spring框架整合,通过它的DispatcherServlet可以完成该功能,DispatcherServlet可将匹配模式的请求转发到Hessian服务。Hessian的server端提供一个servlet基类, 用来处理发送的请求,而Hessian的这个远程过程调用,完全使用动态代理来实现的,,建议采用面向接口编程,Hessian服务通过接口暴露。
Hessian处理过程示意图:
客户端——>序列化写到输出流——>远程方法(服务器端)——>序列化写到输出流 ——>客户端读取输入流——>输出结果
1.基本代码
首先编写一个服务的接口类:HelloHessian.java
import java.util.List;
import java.util.Map;
public interface HelloHessian {
String sayHello();
MyCar getMyCar();
List myLoveFruit();
Map myBabays();
}
2.一个java bean文件MyCar.java:import java.io.Serializable;
public class MyCar implements Serializable {
private static final long serialVersionUID = 4736905401908455439L;
private String carName;
private String carModel;
public String getCarName() {
return carName;
}
public String getCarModel() {
return carModel;
}
public void setCarName(String pCarName) {
carName = pCarName;
}
public void setCarModel(String pCarModel) {
carModel = pCarModel;
}
@Override
public String toString() {
return "my car name:[" + this.carName + "] model:[" + this.carModel + "].";
}
}
3.服务端接口的实现类:HelloHessianImpl.javaimport java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.caucho.hessian.server.HessianServlet;
public class HelloHessianImpl extends HessianServlet implements HelloHessian {
public MyCar getMyCar() {
MyCar car = new MyCar();
car.setCarName("阿斯顿·马丁");
car.setCarModel("One-77");
return car;
}
public Map myBabays() {
Map map = new HashMap();
map.put("son", "孙吴空");
map.put("daughter", "孙小美");
map.put("son", "陈幂");
return map;
}
public List myLoveFruit() {
List list = new ArrayList();
list.add("apple");
list.add("kiwi");
list.add("orange");
return list;
}
public String sayHello() {
return "welcom to Hessian";
}
}
4.工程web.xml文件<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4">
<servlet>
<servlet-name>HelloHessian</servlet-name>
<servlet-class>
com.caucho.hessian.server.HessianServlet
</servlet-class>
<init-param>
<param-name>home-class</param-name>
<param-value>demo.hession.HelloHessianImpl</param-value>
</init-param>
<init-param>
<param-name>home-api</param-name>
<param-value>demo.hession.HelloHessian</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>HelloHessian</servlet-name>
<url-pattern>/HessianService</url-pattern>
</servlet-mapping>
</web-app>
5.java客户端验证代码import java.net.MalformedURLException;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import com.caucho.hessian.client.HessianProxyFactory;
public class HessianClientTest {
public static void main(String[] args) {
String url = "http://localhost:8080/HessianService";
HessianProxyFactory factory = new HessianProxyFactory();
try {
HelloHessian hello = (HelloHessian) factory.create(
HelloHessian.class, url);
System.out.println(hello.sayHello());
MyCar car = hello.getMyCar();
System.out.println(car.toString());
Map babies = hello.myBabays();
Iterator it = babies.entrySet().iterator();
while(it.hasNext()){
Entry entry = (Entry)it.next();
System.out.println(entry.getKey() + " " + entry.getValue());
}
} catch (MalformedURLException e) {
e.printStackTrace();
}
}
}
6.验证结果:welcom to Hessian my car name:[阿斯顿·马丁] model:[One-77]. daughter 孙小美 son 陈幂转自:http://ribbonchen.blog.163.com/blog/static/118316505201472024252460/
- 所属分类: 后端技术
- 本文标签:
热门推荐
-
2、 - 优质文章
-
3、 gate.io
-
8、 openharmony
-
9、 golang