读书人

hessian的容易使用以及拙见

发布时间: 2012-10-09 10:21:45 作者: rapoo

hessian的简单使用以及拙见

hessian简介
? 优点:【摘自网上】hessian类似于Webservice,但是它不使用soap协议,它把协议报文封装到http封包中,通过HTTP信道传输。是一种高效简洁的远程调用框架,它采用的是二进制RPC协议(Binary),具有轻量、传输量小、平台无关的特点,特别适合于目前网络带宽比较小的手机网络应用项目。 Hessian是通过servlet提供远程服务,完全使用动态代理来实现的,推荐采用面向接口编程,因此,Hessian服务建议通过接口暴露。hessian已经支持Java,Flash/Flex,Python,C++,.NET C#,D,Erlang,PHP,Ruby,Objective C。其中我最喜欢的就是它不需要我们与xml“打交道”,直接操作对象,省去了很多麻烦。
? 缺点:如果service层中返回的对象是复杂对象,使用它就会削弱Hessian的传输量小的优点,而且也会增加Hessian客户端的代码量。既然它是把对象序列化为二进制流的形式在http信道中传输,那么对于安全性高的应用不应该采用hessian(比如网上支付等)、

?

hessian的学习很简单且容易上手,下面给一个简单的列子:

新建一个项目hessianTest,建立一个JavaBean,且必须实现序列化接口(对象需要序列化为二进制流在网络上传输)。

import java.io.Serializable;public class Car implements Serializable{private String name;private String card;    setter and getter。。。}

?建立一个对外暴露的接口,以供客户端进行调用。

public interface CarInter {public String getName();public Car getCar();}

在服务器端建立一个接口的实现类,对接口中的方法进行业务操作。

public class CarService implements CarInter {public Car getCar() {Car car = new Car();car.setCard("京A25450");car.setName("宝马");        return car;}public String getName() {return "我是奥巴马!";}}

?最后建立一个客户端,实例化一个hessian的代理工厂,调用接口方法,返回需要数据。[这里我把客户端调用和服务器端的业务操作都写在了一个项目中,你可以分离客户端和服务器端,实现远程调用。即把服务端发布到web服务器,在另一个程序中利用客户端(可以是个Java项目)调用接口方法]

public class CarClient {/**    * @param args  * @throws MalformedURLException  */public static void main(String[] args) throws MalformedURLException {//该地址是服务端提供给你的接口调用地址String url = "http://localhost:8080/hessianTest/hello";HessianProxyFactory factory = new HessianProxyFactory();CarInter basic =(CarInter)factory.create(CarInter.class,url);Car car =basic.getCar();System.out.println("车的牌号:"+car.getCard());System.out.println("车的品牌:"+car.getName());System.out.println("我打印的字符串:"+basic.getName());}}

?最重要的就是服务端对web.xml的配置,

<servlet>    <servlet-name>hello</servlet-name>    <servlet-class>com.caucho.hessian.server.HessianServlet</servlet-class>   <!-- 接口的实现类 -->    <init-param>       <param-name>home-class</param-name>       <param-value>com.hessian.service.CarService</param-value>    </init-param>    <!-- 接口 -->    <init-param>       <param-name>home-api</param-name>       <param-value>com.hessian.inter.CarInter</param-value>    </init-param>  </servlet>  <servlet-mapping>      <servlet-name>hello</servlet-name>      <url-pattern>/hello</url-pattern>  </servlet-mapping>

?据了解,Spring已经完美的实现了hessian,以后研究一下、

?

读书人网 >软件架构设计

热点推荐