分享

Hessian学习笔记

 且看且珍惜 2014-12-12

1.Hessian 介绍

Hessian 是一个轻量级的remoting on http 工具,使用简单的方法提供了RMIRemote Method Invocation ,远程方法调用)的功能。采用的是二进制RPCRemote Procedure Call Protocol ,远程过程调用协议)协议,因为采用的是二进制协议,所以它很适合于发送二进制数据。它提供web 服务就像创建Servlet 一样简单. 使用服务就像使用JDK 代理接口一样简单。

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( 比如网上支付等 )

 

2.Hessian-Demo

初步感受一个hessian 的运行.

1.Java 服务器端:环境:jdk1.6,Tomcat6.0 依赖的包:hessian-3.0.20.jar

<1>. 新建一个名为HessianServerweb project 。将hessian-3.0.20.jar 放入WEB-INF/lib 文件夹中。

<2>. 接口:

Java代码  收藏代码
  1. package jay.demo.hessian.server;  
  2.   
  3. import jay.demo.User;  
  4.   
  5. public interface MyService {  
  6.     public void setName(String name);  
  7.   
  8.     public String sayHello();  
  9.   
  10.     public User getUser();  
  11. }  

<3>. 实现类:

Java代码  收藏代码
  1. package jay.demo.hessian.server.impl;  
  2. import jay.demo.User;  
  3. import jay.demo.hessian.server.MyService;  
  4. public class MyServiceImpl implements MyService {  
  5.   
  6.     private String name;  
  7.     public String sayHello() {  
  8.        return "Hello "+name;  
  9.     }  
  10.     public void setName(String name) {  
  11.        this.name=name;  
  12.        System.out.println("Hello "+name);  
  13.     }  
  14.     public User getUser() {  
  15.        return new User("Jay""123456");  
  16.     }  
  17.  }  

<4>.创建User类,注意:一定要implements Serializable.

Java代码  收藏代码
  1. package jay.demo;  
  2. import java.io.Serializable;  
  3. public class User implements Serializable {  
  4.   
  5.     String name = "server-jay";  
  6.     String password = "server-pwd";  
  7.     public User() {}  
  8.     public User(String name, String password) {  
  9.        super();  
  10.        this.name = name;  
  11.        this.password = password;  
  12.     }  
  13.     public String getName() {  
  14.        return name;  
  15.     }  
  16.     public void setName(String name) {  
  17.        this.name = name;  
  18.     }  
  19.     public String getPassword() {  
  20.        return password;  
  21.     }  
  22.     public void setPassword(String password) {  
  23.        this.password = password;  
  24.     }  
  25. }  

 <5>.配置web.xml

Java代码  收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <web-app version="2.5"   
  3.     xmlns="http://java./xml/ns/javaee"   
  4.     xmlns:xsi="http://www./2001/XMLSchema-instance"   
  5.     xsi:schemaLocation="http://java./xml/ns/javaee   
  6.     http://java./xml/ns/javaee/web-app_2_5.xsd">  
  7.   
  8.   <servlet>  
  9.     <servlet-name>first</servlet-name>  
  10.     <servlet-class>  
  11. com.caucho.hessian.server.HessianServlet  
  12. </servlet-class>  
  13.     <init-param>  
  14.         <param-name>service-class</param-name>  
  15.         <param-value>  
  16. jay.demo.hessian.server.impl.MyServiceImpl  
  17. </param-value>  
  18.     </init-param>  
  19.   </servlet>  
  20.   <servlet-mapping>  
  21.     <servlet-name>first</servlet-name>  
  22.     <url-pattern>/helloworld</url-pattern>  
  23.   </servlet-mapping>  
  24. <welcome-file-list>  
  25.     <welcome-file>index.jsp</welcome-file>  
  26.   </welcome-file-list>  
  27. </web-app>  

 将项目发布到tomcat服务器上
2. Java客户端:环境:jdk1.6,Tomcat6.0 依赖的包:hessian-3.0.20.jar
<1>.创建一个名为HessianClient的java project,导入hessian-3.0.20.jar。
<2>.创建与服务器一样的接口及User类,注意它们所在的包路径也要与服务器相同,否则会出现java.lang.ClassNotFoundException。
<3>.客户端:

Java代码  收藏代码
  1. package jay.client;  
  2.   
  3. import java.net.MalformedURLException;  
  4. import jay.demo.hessian.server.MyService;  
  5. import com.caucho.hessian.client.HessianProxyFactory;  
  6.   
  7. /** 
  8.  *  
  9.  * @author Jay.Sun 2010.10.12 
  10.  * 
  11.  */  
  12. public class clientTest {  
  13.     public static void main(String[] args) throws MalformedURLException,  
  14.   
  15.         ClassNotFoundException {  
  16.         String url = "http://localhost:8080/HessianServer/helloworld";  
  17.         //String url = "http://localhost:8080/HessianServer/remote/helloSpring";  
  18.     HessianProxyFactory factory = new HessianProxyFactory();  
  19.     //MyService myservice = (MyService) factory.create(url);  
  20. MyService myservice = (MyService) factory.create(MyService.class,url);  
  21.     myservice.setName("JaySun-test");  
  22.     System.out.println(myservice.sayHello());  
  23.     System.out.println(myservice.getUser().getName());  
  24.     System.out.println(myservice.getUser().getPassword());  
  25.     }  
  26. }  

 启动tomcat,运行ClientTest。运行结果:
Hello JaySun-test
Jay
123456

后续加上整合Spring,今天先写到这里

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多