Hessian入门(包括与Spring集成)

A.纯Hessian接口开发步骤

Hessian-JAVA服务器端必须具备以下几点:
* 1.包含Hessian的jar包(hessian-4.0.37.jar)
* 2.设计一个接口,用来给客户端调用(IHessian.java)
* 3.实现该接口的功能(IHessianImpl.java)
* 4.配置web.xml,配好相应的Servlet(web.xml)
* 5.对象必须实现Serializable接口(Foo.java)

Hessian-JAVA服务端代码预览图:

1.包含Hessian的jar包(hessian-4.0.37.jar)
re: 可到Hessian官网:http://hessian.caucho.com/下载最新的Hessian包或见文章附件。

2.设计一个接口,用来给客户端调用(IHessian.java)

 1 package my.hessian.service;
 2
 3 import my.hessian.model.Foo;
 4
 5 /**
 6  * 定义对外提供服务的接口(Hessian简单入门)[纯Hessian]
 7  *
 8  * Hessian是一个简单的连接Web服务的二进制协议
 9  *
10  * Hessian-JAVA服务器端必须具备以下几点:
11  * 1.包含Hessian的jar包
12  * 2.设计一个接口,用来给客户端调用
13  * 3.实现该接口的功能
14  * 4.配置web.xml,配好相应的Servlet
15  * 5.对象必须实现Serializable接口
16  *
17  * @author  WChao
18  * @version  [My-1.0, 2016-2-21]
19  */
20 public interface IHessian
21 {
22     public Foo getFoo();
23 }

3.实现该接口的功能(IHessianImpl.java)

 1 package my.hessian.service.impl;
 2
 3 import my.hessian.model.Foo;
 4 import my.hessian.service.IHessian;
 5
 6 /**
 7  * 接口的具体实现类[纯Hessian]
 8  *
 9  * @author  WChao
10  * @version  [My-1.0, 2016-2-21]
11  */
12 public class IHessianImpl implements IHessian
13 {
14     public Foo getFoo()
15     {
16         System.out.println("call getFoo method ~");
17         Foo foo = new Foo();
18         foo.setParam("Hi, This is my first Hessian demo.");
19         return foo;
20     }
21 }

4.配置web.xml,配好相应的Servlet(web.xml)

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
 3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
 5     http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
 6     <welcome-file-list>
 7         <welcome-file>index.jsp</welcome-file>
 8     </welcome-file-list>
 9
10     <servlet>
11         <!-- 配置HessianServlet, 此处ServiceServlet名字可以自定义-->
12         <servlet-name>ServiceServlet</servlet-name>
13         <servlet-class>com.caucho.hessian.server.HessianServlet</servlet-class>
14
15         <!-- 配置接口的具体实现类 -->
16         <init-param>
17             <param-name>service-class</param-name>
18             <param-value>my.hessian.service.impl.IHessianImpl</param-value>
19         </init-param>
20     </servlet>
21     <!-- 映射HessianServlet的访问URL地址-->
22     <servlet-mapping>
23         <servlet-name>ServiceServlet</servlet-name>
24         <url-pattern>/HessianFoo</url-pattern>
25     </servlet-mapping>
26
27     <!--
28         Tips: Hessian与Spring集成的重要文件为什么叫remote-servlet.xml ?
29         因为在web.xml中有配置:<servlet-name>remote</servlet-name>
30         所以remote-servlet.xml的文件名必须以<servlet-name>中配置的servlet-name作为文件名的开头,
31         且文件名的格式必须是[servlet-name]-servlet.xml格式,否则检测不到。
32
33         即:
34         <param-value>remote-servlet</param-value>所以文件名为remote-servlet.xml
35      -->
36     <servlet>
37         <servlet-name>remote</servlet-name>
38         <!-- 使用Spring的代理Servlet -->
39         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
40         <!-- init-param的配置可选,remote-servlet.xml文件默认放置WEB-INF/下面 -->
41         <!-- 如果想自定义remote-servlet.xml名字,修改namespace对应param-value即可 -->
42         <!--
43         <init-param>
44             <param-name>namespace</param-name>
45             <param-value>remote-servlet</param-value>
46         </init-param>
47         -->
48         <load-on-startup>1</load-on-startup>
49     </servlet>
50
51     <servlet-mapping>
52         <servlet-name>remote</servlet-name>
53         <url-pattern>/remoting/*</url-pattern>
54     </servlet-mapping>
55
56 </web-app>

5.对象必须实现Serializable接口(Foo.java)

 1 package my.hessian.model;
 2
 3 import java.io.Serializable;
 4
 5 /**
 6  * 创建一个Foo类,同时实现序列化接口,
 7  * Description: Foo实现了序列化接口后就可以进行序列化,然后就可以通过网络将序列化后的Foo传输到另一台计算机上
 8  *
 9  * @author  WChao
10  * @version  [My-1.0, 2016-2-21]
11  */
12 public class Foo implements Serializable
13 {
14     private static final long serialVersionUID = 1L;
15
16     private String param = "";
17
18     public String getParam()
19     {
20         return param;
21     }
22
23     public void setParam(String param)
24     {
25         this.param = param;
26     }
27
28     public String toString()
29     {
30         return this.param;
31     }
32 }

客户端必须具备以下几点:
* 1.java客户端包含hessian.jar的包(hessian-4.0.37.jar) 
* 2.具有和服务器端结构一样的接口及涉及Bean对象(MyHessianServer.jar-Foo.class)
* 3.利用HessianProxyFactory调用远程接口(HessianClient.java)

Hessian-JAVA客户端端代码预览图:

1.java客户端包含hessian.jar的包(hessian-4.0.37.jar) 
re: 可到Hessian官网:http://hessian.caucho.com/下载最新的Hessian包或见文章附件。

2.具有和服务器端结构一样的接口及涉及Bean对象(MyHessianServer.jar-Foo.class)
re: 见文件附件中的MyHessianServer.jar。

3.利用HessianProxyFactory调用远程接口(HessianClient.java)

 1 package my.hessianclient;
 2
 3 import java.net.MalformedURLException;
 4
 5 import my.hessian.model.Foo;
 6 import my.hessian.service.IHessian;
 7 import my.hessian.service.IHessianOfSpring;
 8
 9 import com.caucho.hessian.client.HessianProxyFactory;
10
11 /**
12  * 调用纯Hessian的客户端
13  *
14  * 客户端必须具备以下几点:
15  * 1.java客户端包含hessian.jar的包
16  * 2.具有和服务器端结构一样的接口及涉及Bean对象
17  * 3.利用HessianProxyFactory调用远程接口
18  *
19  * @author  WChao
20  * @version  [My-1.0, 2016-2-21]
21  */
22 public class HessianClient
23 {
24
25     public static void main(String[] args) throws MalformedURLException
26     {
27         /*
28         <servlet>
29             <!-- 配置HessianServlet, 此处ServiceServlet名字可以自定义-->
30             <servlet-name>ServiceServlet</servlet-name>
31             <servlet-class>com.caucho.hessian.server.HessianServlet</servlet-class>
32
33             <!-- 配置接口的具体实现类 -->
34             <init-param>
35                 <param-name>service-class</param-name>
36                 <param-value>my.hessian.service.impl.IHessianImpl</param-value>
37             </init-param>
38         </servlet>
39         <!-- 映射HessianServlet的访问URL地址-->
40         <servlet-mapping>
41             <servlet-name>ServiceServlet</servlet-name>
42             <url-pattern>/HessianFoo</url-pattern>
43         </servlet-mapping>
44          */
45
46         // 使用HessianProxyFactory Hessian代理工厂直接调用
47         HessianProxyFactory factory = new HessianProxyFactory();
48
49         // 在服务器端的web.xml文件中配置的HessianServlet映射的访问URL地址
50         // 纯Hessian接口
51         String url = "http://localhost:8080/HessianServer/HessianFoo";
52         // 创建IHessian接口的实例对象
53         IHessian iHessian = (IHessian) factory.create(IHessian.class, url);
54
55         Foo myFoo = iHessian.getFoo();
56         System.out.println(myFoo);
57
58         System.out.println("------------------------------------------------------");
59
60         // HessianServiceExporter only supports POST requests
61         // Hessian与Spring集成接口
62         url = "http://localhost:8080/HessianServer/remoting/IHessianOfSpring";
63         IHessianOfSpring iHessianOfSpring = (IHessianOfSpring) factory.create(IHessianOfSpring.class, url);
64
65         myFoo = iHessianOfSpring.getFoo();
66         System.out.println(myFoo);
67
68         // 打印结果:
69         // Hi, This is my first Hessian demo.
70         // ------------------------------------------------------
71         // Hi, This is my first Hessian + Spring demo.
72     }
73 }

B.Hessian+Spring 接口开发步骤

Hessian+Spring服务端开发步骤与纯Hessian接口区别:

1、web.xml配置不同

 1     <!--
 2         Tips: Hessian与Spring集成的重要文件为什么叫remote-servlet.xml ?
 3         因为在web.xml中有配置:<servlet-name>remote</servlet-name>
 4         所以remote-servlet.xml的文件名必须以<servlet-name>中配置的servlet-name作为文件名的开头,
 5         且文件名的格式必须是[servlet-name]-servlet.xml格式,否则检测不到。
 6
 7         即:
 8         <param-value>remote-servlet</param-value>所以文件名为remote-servlet.xml
 9      -->
10     <servlet>
11         <servlet-name>remote</servlet-name>
12         <!-- 使用Spring的代理Servlet -->
13         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
14         <!-- init-param的配置可选,remote-servlet.xml文件默认放置WEB-INF/下面 -->
15         <!-- 如果想自定义remote-servlet.xml名字,修改namespace对应param-value即可 -->
16         <!--
17         <init-param>
18             <param-name>namespace</param-name>
19             <param-value>remote-servlet</param-value>
20         </init-param>
21         -->
22         <load-on-startup>1</load-on-startup>
23     </servlet>
24
25     <servlet-mapping>
26         <servlet-name>remote</servlet-name>
27         <url-pattern>/remoting/*</url-pattern>
28     </servlet-mapping>

2、多了remote-servlet.xml文件及配置

 1 <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
 2 <beans>
 3     <!-- 接口的具体实现类 -->
 4     <bean id="iHessianOfSpringImpl" class="my.hessian.service.impl.IHessianOfSpringImpl" />
 5
 6     <!-- 使用Spring的HessianServie做代理 -->
 7     <bean name="/IHessianOfSpring"
 8         class="org.springframework.remoting.caucho.HessianServiceExporter">
 9         <!-- service引用具体的实现实体Bean-->
10         <property name="service" ref="iHessianOfSpringImpl" />
11         <property name="serviceInterface" value="my.hessian.service.IHessianOfSpring" />
12     </bean>
13
14     <!-- 可以配置多个HessianServiceExporter代理Bean -->
15 </beans>

Hessian+Spring客户端开发步骤与纯Hessian接口区别:

1、除了可以使用HessianProxyFactory Hessian代理工厂直接调用,还可以使用HessianProxyFactoryBean Hessian代理工厂Bean来完成接口调用

 1 package my.hessianclient;
 2
 3 import my.hessian.model.Foo;
 4 import my.hessian.service.IHessianOfSpring;
 5
 6 import org.springframework.context.ApplicationContext;
 7 import org.springframework.context.support.ClassPathXmlApplicationContext;
 8
 9 /**
10  * 调用Hessian与Spring集成接口的客户端
11  * Description: 使用HessianProxyFactoryBean Hessian代理工厂Bean来完成接口调用
12  *
13  * @author  WChao
14  * @version  [My-1.0, 2016-2-21]
15  */
16 public class HessianAndSpringClient
17 {
18     public static void main(String[] args)
19     {
20         ApplicationContext contex = new ClassPathXmlApplicationContext("remote-client.xml");
21
22         // 获得客户端的Hessian代理工厂bean
23         IHessianOfSpring i = (IHessianOfSpring) contex.getBean("myClient");
24         Foo myFoo = i.getFoo();
25         System.out.println(myFoo);
26
27         // 打印结果:
28         // Hi, This is my first Hessian + Spring demo.
29     }
30 }

2、多了remote-client.xml的Spring文件配置

 1 <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
 2 <beans>
 3     <!-- 客户端Hessian代理工厂Bean -->
 4     <bean id="myClient" class="org.springframework.remoting.caucho.HessianProxyFactoryBean">
 5         <!-- 请求代理Servlet路径 -->
 6         <property name="serviceUrl">
 7             <value>http://localhost:8080/HessianServer/remoting/IHessianOfSpring</value>
 8         </property>
 9         <!-- 接口定义 -->
10         <property name="serviceInterface">
11             <value>my.hessian.service.IHessianOfSpring</value>
12         </property>
13     </bean>
14 </beans>

C.代码下载:

Hessian服务端:HessianServer, Hessian客户端:HessianClient

时间: 2024-10-22 09:24:08

Hessian入门(包括与Spring集成)的相关文章

Hessian与Spring集成

简介: Hessian是一个简单的连接Web服务的二进制协议. 客户端和服务端不依赖于其他任何jar,比起webService 它显得轻量许多,比如使用xfire包含核心库和客户端的jar,大小达到了10M ,而最新的hessian-4.0.7  jar大小也只有不到400K. 更适合二进制的传输,比起webService.Hessian的 传输速度要高于webService. 支持Java,c#,Flex(actionscrpit) 配置: Hessian的访问分为客户端和服务端,首先都要有H

RabbitMQ入门教程(十六):RabbitMQ与Spring集成

原文:RabbitMQ入门教程(十六):RabbitMQ与Spring集成 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/vbirdbest/article/details/78805591 分享一个朋友的人工智能教程.比较通俗易懂,风趣幽默,感兴趣的朋友可以去看看. 简介 集成示例基本目录结构 一:引入相关依赖 引入Spring核心的依赖和spring-rabbit依赖,注意sprin

Spring集成Hessian

Hessian是一个轻量级的远程调用工具,采用的是Binary RPC协议,很适合于发送二进制数据,基于HTTP具有防火墙穿透能力.Hessian一般是通过Web应用来提供服务,因此非常类似于平时我们用的Web Service.只是它不使用SOAP协议,但相比Web Service而言更简单.快捷. Burlap与Hessian相似,只是Burlap传输的将是XML而不是二进制的数据. RMI很难穿越防火墙,2端都必须基于Java开发,传输对象时还需要考虑对象版本的问题.而Burlap与Hess

Java Persistence with MyBatis 3(中国版) 第五章 与Spring集成

MyBatis-Spring它是MyBatis子模块框.它用来提供流行的依赖注入框架Spring无缝集成. Spring框架是一个基于依赖注入(Dependency Injection)和面向切面编程(Aspect Oriented Programming,AOP)的Java框架,鼓舞使用基于POJO的编程模型. 另外,Spring提供了声明式和编程式的事务管理能力.能够非常大程度上简化应用程序的数据訪问层(data access layer)的实现.在本章中,我们将看到在基于Spring的应用

Java Persistence with MyBatis 3(中文版) 第五章 与Spring集成

MyBatis-Spring是MyBatis框架的子模块,用来提供与当前流行的依赖注入框架Spring的无缝集成. Spring框架是一个基于依赖注入(Dependency Injection)和面向切面编程(Aspect Oriented Programming,AOP)的Java框架,鼓励使用基于POJO的编程模型.另外,Spring提供了声明式和编程式的事务管理能力,可以很大程度上简化应用程序的数据访问层(data access layer)的实现.在本章中,我们将看到在基于Spring的

Spring集成MyBatis框架

Java在写数据库查询时,我接触过四种方式: 1.纯Java代码,引用对应的数据库驱动包,自己写连接与释放逻辑(可以用连接池) 这种模式实际上性能是非常不错的,但是使用起来并不是非常方便:一是要手工为Connection做获取与释放,大量的冗余代码也容易出错:另一个是,复杂的SQL用字符串写起来简直不可维护(换行.可视长度.参数都是问题). 2.使用Spring JdbcTemplate 这个其实还是挺不错的,配置比较简单,功能丰富上比手工管理Connection要舒服多了,而且代码也比较简洁.

WebService-06-CXF与Spring集成

前言 自3月份到一家快递公司之后,就极少有时间来写博客了,进去的第一个周末就加班,做公司的开放平台,协助一个小伙伴写WebService接口,用的就是CXF,正好这个东西以前使用过.现在快7月了,以前写的东西,还木有写完,今天继续,将以前未写完的东西,写完整. 准备工作 这次的样例,都是在以前的基础上写的,主要贴出主要的代码,服务端和客户端都与Spring集成,使用了拦截器.Map数据类型等 服务端 共计写了四个服务,第一个主要说明服务端有多种发布方式,第二和第三实现类是相同的,区别在于第三个有

框架 day51 BOS项目练习(定区添加及查询,Hessian入门,基于hessian实现定区关联客户功能)

BOS项目笔记第5天 1.    定区添加功能 什么是定区?定区将客户信息.取派员.分区信息关联到一起,为自动分单提供数据. 1.1   在下拉框中展示取派员数据 第一步:修改combobox的url地址,访问StaffAction的listajax方法,查询取派员数据 第二步:在StaffAction中提供方法 /** * ajax查询未作废的员工 * @return */ public String findByWorking(){ List<Staff> list=staffServic

Hessian学习总结(一)——Hessian入门 (来源于网络分享)

Hessian学习总结(一)——Hessian入门 一.远程通讯协议的基本原理 网络通信需要做的就是将流从一台计算机传输到另外一台计算机,基于传输协议和网络 IO 来实现,其中传输协议比较出名的有 http . tcp . udp 等等, http . tcp . udp 都是在基于 Socket 概念上为某类应用场景而扩展出的传输协议,网络 IO ,主要有 bio . nio . aio 三种方式,所有的分布式应用通讯都基于这个原理而实现,只是为了应用的易用,各种语言通常都会提供一些更为贴近应