转自:

http://lancui.iteye.com/blog/935578

简介

相比WebService,Hessian更简单、快捷。采用的是二进制RPC协议(Binary),因为采用的是二进制协议,所以它很适合于发送二进制数据。Hessian通常通过Web应用来提供服务,因此非常类似于WebService。只是它不使用SOAP协议。 
Hessian通过Servlet提供远程服务。需要将匹配某个模式的请求映射到Hessian服务。Spring的DispatcherServlet可以完成该功能,DispatcherServlet可将匹配模式的请求转发到Hessian服务。Hessian的server端提供一个servlet基类, 用来处理发送的请求,而Hessian的这个远程过程调用,完全使用动态代理来实现的,,推荐采用面向接口编程,因此,Hessian服务建议通过接口暴露。 
Hessian处理过程示意图: 
客户端——>序列化写到输出流——>远程方法(服务器端)——>序列化写到输出流 ——>客户端读取输入流——>输出结果

环境搭建 
Hessian的下载和安装请按如下步骤进行: 
(1)登http://www.caucho.com/hessian/下载Hessian。 
(2)把Hessian相应的Jar包放到Web应用下,所有的jar文件都应该放在WEB-INF/lib下,该文件也不例外。 
两种方式 
纯Hessian 
这种方式主要是适用于工程中没有适用像spring框架的情况下,好处是配置方便,但是当内容多的情况下,配置的内容很多。 
下面我就把我在做实例的一些相关步骤描述如下: 
1:把Hessian相应jar包放入至工程中。 
2:由于Hessian是采用面向接口编程的,所以编写一个接口,因为客户端仅仅需要接口,而无须真实的实现类。 
package jzh.demo; 
public interface IHello { 
String sayHello(); 

3:编写一个类实现这个接口。 
package jzh.demo.impl; 
import jzh.demo.IHello; 
import com.caucho.hessian.server.HessianServlet; 
public class Hello extends HessianServlet implements IHello { 
public String sayHello() { 
return "Hello world"; 


4: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>jzh.demo.imple.Hello</param-value> 
</init-param> 
<init-param> 
<param-name>home-api</param-name> 
<param-value>jzh.demo.IHello</param-value> 
</init-param> 
<load-on-startup>1</load-on-startup> 
</servlet>

<servlet-mapping> 
<servlet-name>Hello</servlet-name> 
<url-pattern>/Hello</url-pattern> 
</servlet-mapping>

5:客户端远程调用服务器端提供的接口,利用的就是Hessian的HessianProxyFactory,来实现远程代理。 
1) 把服务器端的生成的jar包,放入工程中。 
2) 相应的片段程序如下: 
String url = "http://220.114.108.185:8080/Hessian/Hello"; 
HessianProxyFactory factory = new HessianProxyFactory(); 
try { 
IHello hello =(IHello)factory.create(IHello.class,url); 
System.out.println(hello.sayHello()); 
} catch (MalformedURLException e) { 
e.printStackTrace(); 

6:功能完成。

Hessian与Spring整合

相比上一种方式,这个方式就有点麻烦了。Hessian通过Servlet提供远程服务。需要将匹配某个模式的请求映射到Hessian服务。Spring的DispatcherServlet可以完成该功能,DispatcherServlet可将匹配模式的请求转发到Hessian服务,web.xml只是定义了“请求转发器”,该转发器将匹配/remoting/*的请求截获,转发给context的bean处理。而HessianServiceExporter提供bean服务。 
所以Hessian与Spring整合主要就是一下两个工作: 
1:通过DispatcherServlet来拦截URL请求。 
2:HessianServiceExporter提供bean服务,Spring使用HessianServiceExporter,将一个常规bean导出成Hessian服务。 
下面我就把我在做实例的一些相关步骤描述如下: 
1:和上面的一样。 
2:和上面的一样。 
3:和上面的一样。 
4:web.xml的详细配置 
<servlet> 
           <servlet-name>remoting</servlet-name>

<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
          <!-- 默认是加载WEB-INF/servlet-name+"-servlet.xml"文件,在这里可以配置为加载WEB-INF/classes/remoting-servlet.xml这个文件  -->

<init-param>
              <param-name>namespace</param-name>
              <param-value>classes/remoting-servlet</param-value>
          </init-param>
           <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
           <servlet-name>remoting</servlet-name> 
           <url-pattern>/remoting/*</url-pattern> 
</servlet-mapping> 
5:配置remoting-servlet.xml文件 
<!--  定义普通bean实例--> 
    <bean id="hello" class="jzh.demospring.impl.Hello"/> 
    <!--  使用HessianServiceExporter 将普通bean导出成Hessian服务--> 
    <bean name="/HessianRemoting" class="org.springframework.remoting.caucho.HessianServiceExporter"> 
           <!--  需要导出的目标bean--> 
           <property name="service" ref="hello"/> 
           <!--  Hessian服务的接口--> 
           <property name="serviceInterface" value="jzh.demospring.IHello"/> 
</bean> 
6:客户端定义一个remoting-client.xml文件 
<bean id="myServiceClient" class="org.springframework.remoting.caucho.HessianProxyFactoryBean"> 
<property name="serviceUrl"> 
<value>http://220.114.99.62:8080/HessianSpring/remoteing/HessianRemoting</value> 
</property> 
<property name="serviceInterface"> 
<value>jzh.demospring.IHello</value> 
</property> 
</bean> 
7:客户端调用。 
try 
{                                                               
ApplicationContext context = new ClassPathXmlApplicationContext("remote-client.xml");

IHello hello =(IHello)context.getBean("myServiceClient");

System.out.println(hello.sayHello()); 

catch (Exception e) 

e.printStackTrace(); 

注意事项 
1:启动tomcat的时候,出现如下问题:java.lang.ClassNotFoundException: org.springframework.web.servlet.DispatcherServlet。,而在工程中是可以找到相应的jar文件,这究竟是什么问题。 
解决方法:可能是在工程的WEB-INF/lib下面没有加载相应的jar文件 
2:org.springframework.remoting.RemoteAccessException: Cannot access Hessian service at [http://61.152.162.173/remote/remoteService]; 
解决方法:出现这个异常一般是因为服务端操作出现异常引起的

发表时间:2008-08-13   谢谢,正在学习怎么搭建hessian服务,看了以后帮助很大!

发表时间:2008-08-19   我觉得RPC有两种方式,调用远程的方法: 
1、方法在远程执行,将操作结果传回给客户端。优点:服务器负荷小,传输数据量小,客户端无需知道服务器端定义的服务接口。缺点:需要对数据进行拼装解析等复杂操作。 
2、方法加载到客户端运行。优点:可以和缓存配合,每次运行只传输一次,可靠性高,有些方法没有返回值,只是进行例如print的打印语句能在客户端运行。缺点:传输数据大,客户端需要知道服务接口。

我猜想 
IHello hello =(IHello)factory.create(IHello.class,url); 
System.out.println(hello.sayHello()); 
它是第二种方式

发表时间:2008-08-29   其实,它采用的是第一种方式,是在远程执行,而非是你说的第二种

5:客户端远程调用服务器端提供的接口,利用的就是Hessian的HessianProxyFactory,来实现远程代理。
1) 把服务器端的生成的jar包,放入工程中。

Hessian Servlet和Hessian Spring的简单应用的更多相关文章

  1. 惊呆了,Servlet Filter和Spring MVC Interceptor的实现居然这么简单

    前言 创建型:单例模式,工厂模式,建造者模式,原型模式 结构型:桥接模式,代理模式,装饰器模式,适配器模式,门面模式,组合模式,享元模式 行为型:观察者模式,模板模式,策略模式,责任链模式,状态模式, ...

  2. Spring mvc 简单异常配置jsp页面

    原文出处:http://howtodoinjava.com/spring/spring-mvc/spring-mvc-simplemappingexceptionresolver-example/ 这 ...

  3. Spring mvc系列一之 Spring mvc简单配置

    Spring mvc系列一之 Spring mvc简单配置-引用 Spring MVC做为SpringFrameWork的后续产品,Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块 ...

  4. 玩转spring boot——简单登录认证

    前言 在一个web项目中,某些页面是可以匿名访问的,但有些页面则不能.spring mvc提供了HandlerInterceptor接口来应对,只需要重写preHandle方法便可以实现此功能.那么使 ...

  5. Spring MVC简单原理

    Spring MVC原理 针对有Java Web基础.Spring基础和Spring MVC使用经验者. 前言 目前基于Java的web后端,Spring生态应该是比较常见了.虽然现在流行前后端分离, ...

  6. Spring管理Filter和Servlet(在servlet中注入spring容器中的bean)

    在使用spring容器的web应用中,业务对象间的依赖关系都可以用context.xml文件来配置,并且由spring容器来负责依赖对象 的创建.如果要在servlet中使用spring容器管理业务对 ...

  7. spring security 简单入门

    spring security 简单入门示例 一.概述 Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架 . 其中最主要的安全操作有两 ...

  8. Spring Boot简单操作

    目录 一.自定义异常页面 二.单元测试 ​三.多环境选择 四.读取主配置文件中的属性 五.读取List属性 一.自定义异常页面 对于404.405.500等异常状态,服务器会给出默认的异常页面,而这些 ...

  9. Spring cache简单使用guava cache

    Spring cache简单使用 前言 spring有一套和各种缓存的集成方式.类似于sl4j,你可以选择log框架实现,也一样可以实现缓存实现,比如ehcache,guava cache. [TOC ...

随机推荐

  1. Python之路第六天,进阶-算法

    排序算法 冒泡排序 冒泡排序原理: 原理是临近的数字两两进行比较,按照从小到大或者从大到小的顺序进行交换,这样一趟过去后,最大或最小的数字被交换到了最后一位,然后再从头开始进行两两比较交换,直到倒数第 ...

  2. fzu 1753 Another Easy Problem

    本题题意为求 t (t<150) 个 c (n,m)  (1<=m<=n<=100000)的最大公因子: 本题的难点为优化.主要有两个优化重点.一是每次对单个素因子进行处理,优 ...

  3. Azure上Linux虚拟机Mac地址的持久化

    有些用户在使用Azure Linux 虚拟机安装软件时,有些软件的license会和当前系统的mac地址绑定,那么在Azure VM重启,reszie(改变尺寸大小),停止然后再启动的时候,虚拟机的M ...

  4. 浅谈 qmake 之 shadow build(就是将源码路径和构建路径分开)

    shadow build shadow build 是什么东西?就是将源码路径和构建路径分开(也就是生成的makefile文件和其他产物都不放到源码路径),以此来保证源码路径的清洁. 这不是qmake ...

  5. WAMP环境搭建步骤

    在d盘创建myServer文件夹 然后apache2.2 mysql php-5.3.5  1 安装apache2.2 2 安装php-5.3.5 3 apache与php环境的整合 1)在httpd ...

  6. c++优先级

    蒟蒻连c++的运算优先级都搞不清楚QAQ 转载自http://www.cnblogs.com/chenglei/archive/2009/08/03/1537822.html C++优先级列表 Pre ...

  7. MediaInfo使用简介(新版本支持HEVC)

    MediaInfo 用来分析视频和音频文件的编码和内容信息,是一款是自由软件 (免费使用.免费获得源代码).他除了提供DLL之外,本身也提供GUI工具用于查看视频信息.我使用中发现,新版本的Media ...

  8. Make 命令教程 -- 阮一峰

    摘自http://www.ruanyifeng.com/blog/2015/02/make.html Make 命令教程 作者: 阮一峰 日期: 2015年2月20日 代码变成可执行文件,叫做编译(c ...

  9. C#中HashTable的用法 【转】

    一,哈希表(Hashtable)简述 在.NET Framework中,Hashtable是System.Collections命名空间提供的一个容器,用于处理和表现类似keyvalue的键值对,其中 ...

  10. poj 3026 (最小生成树)

    题意:起点开始有超过100个人,总共不会超过100个外星人,问把所有的外星人都搜出来花的最小时间.一条路径上的时间跟人数是无关的,只跟路径长度有关. 思路:刚开始人都在起点,当派一定人数去最近的外星人 ...