hessian java_Hessian构建分布式系统应用

本文为原创,欢迎转载,转载请注明出处BlogJava。

Hessian是一个轻量级的remoting onhttp工具,使用简单的方法提供了RMI的功能. 相比WebService,Hessian更简单、快捷。

采用的是二进制RPC协议,因为采用的是二进制协议,所以它很适合于发送二进制数据。

本文将分为以下几个内容:

一、一个简单的Hessian调用例子

二、Spring+Hessian的例子

三、使我们的调用变得通用

第一部分:一个简单的Hessian调用例子

建立web工程HessianService。

这里为了简单起见,我将远程接口类、接口实现类都定义在此web工程下。

个人觉得一个比较好的做法是将web工程分开,此web工程只定义对外的接口并提供服务,而实现类新建一个Java工程存放。

这样web工程依赖此Java工程,且客户端也依赖此Java工程。

1) 远程接口类 ServiceRemote.java

4f1150b881333f12a311ae9ef34da474.pngpackagecom.al;

4f1150b881333f12a311ae9ef34da474.png

4f1150b881333f12a311ae9ef34da474.pngimportjava.util.Map;

4f1150b881333f12a311ae9ef34da474.png

4f1150b881333f12a311ae9ef34da474.png@SuppressWarnings("unchecked")

1fa987a29c6482f53d401256f96355eb.png

ca75c07623e1b494fee67e8f316fc310.gifpublicinterfaceServiceRemote9b8a8a44dd1c74ae49c20a7cd451974e.png{

d18c02628675d0a2c816449d98bda930.pngpublicMap callService(Map inputMap) ;

8f1ba5b45633e9678d1db480c16cae3f.png}

2) 实现类 Service.java

4f1150b881333f12a311ae9ef34da474.pngpackagecom.al;

4f1150b881333f12a311ae9ef34da474.png

4f1150b881333f12a311ae9ef34da474.pngimportjava.util.HashMap;

4f1150b881333f12a311ae9ef34da474.pngimportjava.util.Map;

4f1150b881333f12a311ae9ef34da474.png

4f1150b881333f12a311ae9ef34da474.png@SuppressWarnings("unchecked")

1fa987a29c6482f53d401256f96355eb.png

ca75c07623e1b494fee67e8f316fc310.gifpublicclassServiceimplementsServiceRemote9b8a8a44dd1c74ae49c20a7cd451974e.png{

d18c02628675d0a2c816449d98bda930.png

97e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gifpublicMap callService(Map inputMap)9b8a8a44dd1c74ae49c20a7cd451974e.png{

97e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gifif(inputMap==null)9b8a8a44dd1c74ae49c20a7cd451974e.png{

d18c02628675d0a2c816449d98bda930.png            inputMap=newHashMap();

ecedf933ec37d714bd4c2545da43add2.png        }d18c02628675d0a2c816449d98bda930.png//do something

d18c02628675d0a2c816449d98bda930.png//9b8a8a44dd1c74ae49c20a7cd451974e.pngd18c02628675d0a2c816449d98bda930.pnginputMap.put("NAME","Hessian");

d18c02628675d0a2c816449d98bda930.pngreturninputMap;

ecedf933ec37d714bd4c2545da43add2.png    }8f1ba5b45633e9678d1db480c16cae3f.png}

3) web.xml配置

4f1150b881333f12a311ae9ef34da474.png<?xml  version="1.0" encoding="UTF-8"?>4f1150b881333f12a311ae9ef34da474.png    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 

4f1150b881333f12a311ae9ef34da474.png http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">4f1150b881333f12a311ae9ef34da474.png4f1150b881333f12a311ae9ef34da474.pnghessianService4f1150b881333f12a311ae9ef34da474.pngcom.caucho.hessian.server.HessianServlet4f1150b881333f12a311ae9ef34da474.png4f1150b881333f12a311ae9ef34da474.pngservice-class4f1150b881333f12a311ae9ef34da474.pngcom.al.Service4f1150b881333f12a311ae9ef34da474.png4f1150b881333f12a311ae9ef34da474.png4f1150b881333f12a311ae9ef34da474.png4f1150b881333f12a311ae9ef34da474.pnghessianService4f1150b881333f12a311ae9ef34da474.png/hessianService4f1150b881333f12a311ae9ef34da474.png4f1150b881333f12a311ae9ef34da474.png

经过以上3步,hessian服务部署算是完成了,在tomcat下发布。

4) 调用方代码

4f1150b881333f12a311ae9ef34da474.pngpackagecom.ai.client;

4f1150b881333f12a311ae9ef34da474.png

4f1150b881333f12a311ae9ef34da474.pngimportcom.al.ServiceRemote;

4f1150b881333f12a311ae9ef34da474.pngimportcom.caucho.hessian.client.HessianProxyFactory;

4f1150b881333f12a311ae9ef34da474.png

1fa987a29c6482f53d401256f96355eb.png

ca75c07623e1b494fee67e8f316fc310.gifpublicclassClientTest9b8a8a44dd1c74ae49c20a7cd451974e.png{

97e794c86028c5f5b5461ae5ef440a4c.png

3c6cafce68eb941a00f1998f1d3d3aa6.gifpublicstaticvoidmain(String[] args)throwsException9b8a8a44dd1c74ae49c20a7cd451974e.png{

d18c02628675d0a2c816449d98bda930.png        String url="http://localhost:8080/HessianService/hessianService";

d18c02628675d0a2c816449d98bda930.png        HessianProxyFactory factory=newHessianProxyFactory();

d18c02628675d0a2c816449d98bda930.png        ServiceRemote rmt=(ServiceRemote) factory.create(ServiceRemote.class, url);

d18c02628675d0a2c816449d98bda930.png        System.out.println(rmt.callService(null));

ecedf933ec37d714bd4c2545da43add2.png    }8f1ba5b45633e9678d1db480c16cae3f.png}

执行代码,结果如下:

{NAME=Hessian}

说明调用远程代码成功了。

二、Spring+Hessian的例子

1) web工程HessianService 的ServiceRemote 和Service类不变。对web.xml进行修改:

4f1150b881333f12a311ae9ef34da474.png<?xml  version="1.0" encoding="UTF-8"?>4f1150b881333f12a311ae9ef34da474.png    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 

4f1150b881333f12a311ae9ef34da474.png    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">4f1150b881333f12a311ae9ef34da474.png4f1150b881333f12a311ae9ef34da474.pngcontextConfigLocation4f1150b881333f12a311ae9ef34da474.png/WEB-INF/dispatcher-servlet.xml4f1150b881333f12a311ae9ef34da474.png4f1150b881333f12a311ae9ef34da474.png4f1150b881333f12a311ae9ef34da474.pngdispatcher4f1150b881333f12a311ae9ef34da474.pngorg.springframework.web.servlet.DispatcherServlet4f1150b881333f12a311ae9ef34da474.png14f1150b881333f12a311ae9ef34da474.png4f1150b881333f12a311ae9ef34da474.png4f1150b881333f12a311ae9ef34da474.pngdispatcher4f1150b881333f12a311ae9ef34da474.png/remote/*4f1150b881333f12a311ae9ef34da474.png4f1150b881333f12a311ae9ef34da474.png4f1150b881333f12a311ae9ef34da474.pngindex.jsp4f1150b881333f12a311ae9ef34da474.png4f1150b881333f12a311ae9ef34da474.png

这里要注意的是:

a)dispatcher-servlet.xml这个文件的命名。servlet配置为dispatcher,则此文件定义规则为****-servlet.xml.

b)另外就是Spring和hessian的版本问题。

spring版本是2.5.6,需要在此web工程下引入:spring-2.5.6.jar、spring-webmvc-2.5.6.jar、commons-logging-1.1.1.jar。

hessian的版本是hessian-3.1.6.jar,hessian的低版本如 hessian-3.0.13和此Spring版本不合。(我试验了是配置不成功的。)

2) dispatcher-servlet.xml

4f1150b881333f12a311ae9ef34da474.png<?xml  version="1.0" encoding="UTF-8"?>4f1150b881333f12a311ae9ef34da474.pngbeans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">4f1150b881333f12a311ae9ef34da474.png4f1150b881333f12a311ae9ef34da474.pnghessian server properties4f1150b881333f12a311ae9ef34da474.png4f1150b881333f12a311ae9ef34da474.png4f1150b881333f12a311ae9ef34da474.png4f1150b881333f12a311ae9ef34da474.png4f1150b881333f12a311ae9ef34da474.png4f1150b881333f12a311ae9ef34da474.png4f1150b881333f12a311ae9ef34da474.pngcom.al.ServiceRemote4f1150b881333f12a311ae9ef34da474.png4f1150b881333f12a311ae9ef34da474.png4f1150b881333f12a311ae9ef34da474.png

3) 客户端代码可以保持原样不变,把调用hessian服务的url变换一下即可:

http://localhost:8080/HessianService/remote/service

http://IP:port/发布工程名/web.xml中配置的url-pattern/****-servlet.xml bean的ID。

三、使我们的调用变得通用 将在下一篇中介绍。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值