本文为原创,欢迎转载,转载请注明出处BlogJava。
Hessian是一个轻量级的remoting onhttp工具,使用简单的方法提供了RMI的功能. 相比WebService,Hessian更简单、快捷。
采用的是二进制RPC协议,因为采用的是二进制协议,所以它很适合于发送二进制数据。
本文将分为以下几个内容:
一、一个简单的Hessian调用例子
二、Spring+Hessian的例子
三、使我们的调用变得通用
第一部分:一个简单的Hessian调用例子
建立web工程HessianService。
这里为了简单起见,我将远程接口类、接口实现类都定义在此web工程下。
个人觉得一个比较好的做法是将web工程分开,此web工程只定义对外的接口并提供服务,而实现类新建一个Java工程存放。
这样web工程依赖此Java工程,且客户端也依赖此Java工程。
1) 远程接口类 ServiceRemote.java
packagecom.al;
importjava.util.Map;
@SuppressWarnings("unchecked")
publicinterfaceServiceRemote{
publicMap callService(Map inputMap) ;
}
2) 实现类 Service.java
packagecom.al;
importjava.util.HashMap;
importjava.util.Map;
@SuppressWarnings("unchecked")
publicclassServiceimplementsServiceRemote{
publicMap callService(Map inputMap){
if(inputMap==null){
inputMap=newHashMap();
}//do something
//inputMap.put("NAME","Hessian");
returninputMap;
}}
3) web.xml配置
<?xml version="1.0" encoding="UTF-8"?> xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">hessianServicecom.caucho.hessian.server.HessianServletservice-classcom.al.ServicehessianService/hessianService
经过以上3步,hessian服务部署算是完成了,在tomcat下发布。
4) 调用方代码
packagecom.ai.client;
importcom.al.ServiceRemote;
importcom.caucho.hessian.client.HessianProxyFactory;
publicclassClientTest{
publicstaticvoidmain(String[] args)throwsException{
String url="http://localhost:8080/HessianService/hessianService";
HessianProxyFactory factory=newHessianProxyFactory();
ServiceRemote rmt=(ServiceRemote) factory.create(ServiceRemote.class, url);
System.out.println(rmt.callService(null));
}}
执行代码,结果如下:
{NAME=Hessian}
说明调用远程代码成功了。
二、Spring+Hessian的例子
1) web工程HessianService 的ServiceRemote 和Service类不变。对web.xml进行修改:
<?xml version="1.0" encoding="UTF-8"?> xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">contextConfigLocation/WEB-INF/dispatcher-servlet.xmldispatcherorg.springframework.web.servlet.DispatcherServlet1dispatcher/remote/*index.jsp
这里要注意的是:
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
<?xml version="1.0" encoding="UTF-8"?>beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">hessian server propertiescom.al.ServiceRemote
3) 客户端代码可以保持原样不变,把调用hessian服务的url变换一下即可:
http://localhost:8080/HessianService/remote/service
http://IP:port/发布工程名/web.xml中配置的url-pattern/****-servlet.xml bean的ID。
三、使我们的调用变得通用 将在下一篇中介绍。