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.java
import 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、 golang
-
9、 openharmony
-
10、 Vue中input框自动聚焦