本篇主要介绍Hessian的入门知识,包括Hessian服务端的搭建和客户端的调用。
1 服务器搭建
1.1 创建普通Web工程
这样的Web工程可以是Maven下面的工程,也可以是不用Maven构建的工程。如果是Maven工程可是使用如下依赖:
<dependency>
<groupId>com.caucho</groupId>
<artifactId>hessian</artifactId>
<version>3.1.5</version>
</dependency>
hession的版本可以随项目的情况调整。
如果Web工程不用Maven构建,可以通过http://mvnrepository.com/artifact/com.caucho/hessian下载合适版本的hession包,放在合适的路径上即可。
1.2 新建接口
Hessian对外的服务通常被定义成一个Interface。示例如下:
package service;
/**
* 功能:Hessian对外提供的服务接口
*/
public interface Base {
public String hello(String value);
}
1.3 实现接口
服务器端对外提供服务需要实现上面定义的接口:
package service;
public class Hello implements Base {
public String hello(String user) {
return "hello " + user+" !";
}
}
1.4 修改Web.xml
Hessian通过HttpServlet的方式对外提供服务,Hessian对外提供服务还需要配置Web.xml文件,配置项参考下面代码:
<servlet>
<servlet-name>base</servlet-name> <!-- servlet-class中指定的类是固定的,统一使用 com.caucho.hessian.server.HessianServlet-->
<servlet-class>com.caucho.hessian.server.HessianServlet</servlet-class>
<init-param> <!-- 服务实现类,使用全路径 -->
<param-name>home-class</param-name>
<param-value>service.Hello</param-value>
</init-param>
<init-param> <!-- 服务接口,使用全路径 -->
<param-name>home-api</param-name>
<param-value>service.Base</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>base</servlet-name>
<url-pattern>/base</url-pattern>
</servlet-mapping>
1.5 启动程序
2 客户端调用
2.1 创建客户端类
由于我的客户端程序直接放在同一个Web工程下面,直接创建客户端程序:
package service;
import com.caucho.hessian.client.HessianProxyFactory;
public class Test {
/**
* @param args
*/
public static void main(String[] args)throws Exception {
// 远程调用地址
String url = "http://127.0.0.1:8080/test/base";
//默认写法
HessianProxyFactory factory = new HessianProxyFactory(); //实例化
Base base = (Base)factory.create(Base.class,url);
//调用接口,并打印结果
System.out.println(base.hello("world"));
}
}
通常情况下,编写客户端程序需要依赖服务器提供的客户端jar。
2.2 执行调用
3 常见问题
3.1 jdk版本问题
Web工程使用1.4版本的jdk,并且单单只引用hessian的jar包,在客户端调用的时候会出现找不到类“net.sf.retrotranslator.runtime.java.lang._Integer”等错误。解决办法,添加依赖retrotranslator-runtime-1.2.9.jar。
关于retrotranslator的参考链接:http://huajiang.iteye.com/blog/501086