一。简介

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

Hessian处理过程示意图:
客户端——>序列化写到输出流——>远程方法(服务器端)——>序列化写到输出流 ——>客户端读取输入流——>输出结果

二。 不使用Spring框架下的hessian相关例子

1. 把Hessian相应jar包放入至工程中。

2. 由于Hessian是采用面向接口编程的,所以编写一个接口,因为客户端仅仅需要接口,而无须真实的实现类。

package demo;public interface ITest {public String sayHello();}

3.编写一个类实现这个接口。

package demo;/*** * @author alan* @createtime 2013-4-11     **/
public class TestImpl implements ITest {@Overridepublic String sayHello() {// TODO Auto-generated method stubreturn "HELLO ALAN.";}}

4. web.xml的详细配置

 <!-- noSpring --><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>demo.TestImpl</param-value></init-param><init-param><param-name>home-api</param-name><param-value>demo.ITest</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,来实现远程代理。

客户端调用代码例子:

 private static void noSpring() {String url = "http://localhost:8080/SpringHessian/Hello";HessianProxyFactory factory = new HessianProxyFactory();try {ITest hello = (ITest) factory.create(ITest.class, url);System.out.println(hello.sayHello());} catch (MalformedURLException e) {e.printStackTrace();}}

三。 使用spring框架时候的Hessian例子。

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服务。

具体配置步骤例子如下:

一。客户端直接调用接口获取Bean实例例子。

1。和上面的一样。
2。和上面的一样。
3。和上面的一样。
4。web.xml的详细配置

 <!-- SpringHessian --><servlet><servlet-name>remoting</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>remoting</servlet-name><url-pattern>/remoting/*</url-pattern></servlet-mapping>

5. 在WEB-INF文件夹下配置remoting-servlet.xml文件

 <!-- 定义普通bean实例--><bean id="test" class="demo.TestImpl" /><!-- 使用HessianServiceExporter 将普通bean导出成Hessian服务--><bean name="/test" class="org.springframework.remoting.caucho.HessianServiceExporter"><!-- 需要导出的目标bean --><property name="service" ref="test" /><!-- Hessian服务的接口 --><property name="serviceInterface" value="demo.ITest" /></bean>   

6. 客户端调用例子

 private static void springHessian() throws MalformedURLException {String url = "http://localhost:8080/SpringHessian/remoting/test";  HessianProxyFactory factory = new HessianProxyFactory();  factory.setDebug(true);ITest hello = (ITest) factory.create(ITest.class, url);System.out.println(hello.sayHello());}

二。客户端通过配置配置文件获取Bean实例例子。

1. 客户端引入相关的JAR包。

2. 客户端定义一个 remote-client.xml文件

<bean id="myServiceClient" class="org.springframework.remoting.caucho.HessianProxyFactoryBean">
<property name="serviceUrl">
<value>http://localhost:8080/SpringHessian/remoting/test</value>
</property>
<property name="serviceInterface">
<value>demo.ITest</value>
</property>
</bean> 

3. 客户端调用例子

try
{
ApplicationContext context = new ClassPathXmlApplicationContext("remote-client.xml"); ITest hello =(ITest)context.getBean("myServiceClient"); System.out.println(hello.sayHello());
}
catch (Exception e)
{
e.printStackTrace();
} 

Hessian Spring相关使用的简单例子相关推荐

  1. spring mvc(注解)上传文件的简单例子

    spring mvc(注解)上传文件的简单例子,这有几个需要注意的地方 1.form的enctype="multipart/form-data" 这个是上传文件必须的 2.appl ...

  2. 【elastic-job】elastic-job部署以及简单例子

    一.elastic-job是什么 elastic-job是当当开发的基于qutarz以及zookeeper封装的作业调度工具,主要有两个大框架,一个是elastic-job lite另外一个是elas ...

  3. 使用Eclipse开发Spring的第一个简单程序

    使用Eclipse开发Spring的第一个简单程序 本篇文章将通过一个简单的入门程序向读者演示Spring框架的使用过程,具体如下: 使用Eclipse创建Web应用并导入JAR包 使用Eclipse ...

  4. ECSide入门简单例子(转fins)

    ECSide是有一个基于jsp tag的开源列表组件. 简单的说,它就是一组可以帮助你快速实现强大的列表的jsp标签. 它的工作原理很简单. 您将要展现的列表的数据集合(Collection),放入r ...

  5. java 国际化例子_JavaSE 国际化 简单例子

    ①在src下添加两个文件: base_zh_CN.properties Test=\u8fd9\u662f\u4e2d\u6587 base_en_US.properties Test=english ...

  6. C#操作MySQL数据库的简单例子

    其实很简单,但是我在网上找的时候却找不到有用的信息,奇怪. 到这里下载驱动 http://www.mysql.com/products/connector/ 下载的包里面有使用的例子. 需要具备的知识 ...

  7. Spring AOP 简介以及简单用法

    Spring AOP 简介以及简单用法 如果你去面试java开发, 那么Spring的AOP和DI几乎是必问的问题. 那么AOP是什么呢? 一. AOP 所谓Aop就是 Aspect-Oriented ...

  8. C++头文件<functional>和bind、placeholders占位符使用简单例子

    相关博文:C++新特性探究(十五):bind 相关博文:C++头文件<functional>和bind.placeholders占位符使用简单例子 相关博文:<Essential C ...

  9. AgileEAS.NET SOA 中间件平台.Net Socket通信框架-简单例子-实现简单的服务端客户端消息应答...

    一.AgileEAS.NET SOA中间件Socket/Tcp框架介绍 在文章AgileEAS.NET SOA 中间件平台Socket/Tcp通信框架介绍一文之中我们对AgileEAS.NET SOA ...

最新文章

  1. VC程序编译成exe后需msvcr100.dll、msvcp100.dll才能运行的解决方法
  2. 01 数据类型 、常量变量、运算符、表达式、格式化输入输出
  3. UPS故障案例集(二)
  4. React前端格式化时间
  5. 一起学windows phone7开发(二十一.二 Map控件的简单使用)
  6. Android(java)学习笔记164:开发一个多界面的应用程序之不同界面间互相传递数据(短信助手案例)...
  7. 331页!2021年的精华尽在这本数据库技术年刊
  8. 2018年线程与多线程面试必知必会内容
  9. ./configure 出错Your intltool is too old. You need intltool 0.35
  10. Avro, Protocol Buffers 、Thrift的联系与区别
  11. wps2000集成办公系统 v3.02.99专业版(附序列号)|wps2000老版本
  12. 人脸图像数据库(完整版)
  13. 微软新的邮件帐户域名 @live.com和@windowslive.com
  14. DataFrame-删除行列
  15. python 比较好的社区
  16. 普歌-Vue 封装防刷新考试倒计时组
  17. 微信公众平台开发教程第20篇-新手解惑40则
  18. kubelet cgroup driver与docker cgroup drive不一致解决方案
  19. 最近项目中公用的JS
  20. alibabaprotect 是危险的有害的顽固的病毒般的存在

热门文章

  1. Android 连接SQLite
  2. 操作系统双语阅读 - Schedulers调度器2
  3. uva-10341-二分法
  4. HDU 6241 Color a Tree
  5. 《极客学院 --NSAttributedString 使用详解-4-UITextKit 简介》学习笔记(待处理)...
  6. Service onStartCommand 返回值
  7. 电脑休眠跟睡眠的区别
  8. DataList控件中使用Xml数据源
  9. 北京最值得逛的50个地方:后海、798、簋街...
  10. Sql查找断号区间...