Hessian是一个轻量级的remoting onhttp工具,使用简单的方法提供了RMI的功能。 相比WebService,Hessian更简单、快捷。
随着现在互联网系统越来越复杂,异构信息系统之间信息交互变得非常重要,而WebService使用起来又比较麻烦,Hessian相对使用起来比较简单,下面我们来简单说一下如何使用Hessian来搭建异构信息系统之间数据交互。
Hessian实现WebService基本上需要如下几个步骤:
一、创建Web项目
二、创建Service接口
三、实现Service
四、配置web.xml
五、实现Client
上面一~四步是服务端操作过程,第五步是服务端实现过程。
(Hessian官网也有入门的例子,有兴趣的朋友也可以看一下。http://hessian.caucho.com/doc/hessian-overview.xtp)。建议朋友们如果可能的话尽可能去看一下官网上的demo,本人也是基于官网上的例子来写的,阅读官网上的demo一方面可以提高自己学习的能力,另一方面也可以提升一下英语阅读水平,一举两得,何乐而不为。如果你不想看英文的话,那就勉为其难看看我写的吧,同样是刚学习Hessian,有不足之处欢迎大家指正。
废话不多说,下面进入正题:
一、创建Web项目
这里我使用的是Maven进行项目构建的(建议没有使用过Maven的朋友有时间学习一下Maven,对自己软件开发有莫大的帮助)。然后引入Hessian的依赖包(如果是普通Web项目的话请到官网去下载相应的jar包,然后引入项目里面)
<dependency>
<groupId>com.caucho</groupId>
<artifactId>hessian</artifactId>
<version>4.0.7</version>
</dependency>
这里我们用的是4.0.7这个版本的Hessian。
二、建立Service接口
接下来我们建立一个普通的用户服务接口。
/**
* 用户信息服务
*/
package com.mhy.hessian.service;
import java.util.List;
import com.mhy.domain.User;
/**
* @author mhy2011@gmail.com
* @date 2013年9月29日
*/
public interface UserService {
String sayHello(String username);
User getUser();
List<User> getUsers();
}
三、实现Service接口
/**
* 用户信息服务实现类
*/
package com.mhy.hessian.service.impl;
import java.util.ArrayList;
import java.util.List;
import com.mhy.domain.User;
import com.mhy.hessian.service.UserService;
/**
* @author mhy2011@gmail.com
* @date 2013年9月29日
*/
public class UserServiceImpl implements UserService {
@Override
public String sayHello(String username) {
System.out.println("sayHello 方法被调用!");
return "Hello " + username + ", Welcome to Spring Hessian World";
}
@Override
public User getUser() {
System.out.println("getUser 方法被调用!");
return new User(1, "张三", "123456");
}
@Override
public List<User> getUsers() {
System.out.println("getUsers 方法被调用!");
List<User> users = new ArrayList<User>();
users.add(new User(1, "张三", "123456"));
users.add(new User(2, "李四", "111111"));
users.add(new User(3, "王五", "654321"));
return users;
}
}
在上面的类里面我们实现了接口的三个方法,为了方便起见不再与数据库进行交互,原理是一样的。
四、配置web.xml
接下来我们配置Server端的web.xml配置文件,用以标记上面的User服务的访问地址
<servlet>
<servlet-name>userService</servlet-name>
<servlet-class>com.caucho.hessian.server.HessianServlet</servlet-class>
<init-param>
<param-name>home-class</param-name>
<param-value>com.mhy.hessian.service.impl.UserServiceImpl</param-value>
</init-param>
<init-param>
<param-name>home-api</param-name>
<param-value>com.mhy.hessian.service.UserService</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>userService</servlet-name>
<url-pattern>/userService</url-pattern>
</servlet-mapping>
上面的servlet就是我们针对User服务提供的访问地址。如果要提供多个服务给第三方client的话,可以建立多个servlet。
五、实现Client
Hessian创建客户端也非常简单,第一步是创建HessianProxyFactory;第二步是获取服务;第三步是调用服务所提供的方法。
/**
* Hessian 客户端测试程序
*/
package com.mhy.client;
import java.net.MalformedURLException;
import java.util.List;
import org.junit.Test;
import com.caucho.hessian.client.HessianProxyFactory;
import com.mhy.domain.User;
import com.mhy.hessian.service.UserService;
/**
* @author mhy2011@gmail.com
* @date 2013年9月29日
*/
public class HessianClientTest {
@Test
public void testUserService(){
String url = "http://localhost:8080/userService"; //hessian服务地址
HessianProxyFactory factory = new HessianProxyFactory();
try {
//创建服务
UserService service = (UserService) factory.create(UserService.class, url);
System.out.println(service.sayHello("张三")); //调用sayHello方法
System.out.println("------------------------");
System.out.println(service.getUser()); //调用getUser方法
System.out.println("------------------------");
List<User> users = service.getUsers();
if(null != users && users.size() > 0){
for(User u : users){
System.out.println(u);
}
}
} catch (MalformedURLException e) {
e.printStackTrace();
}
}
}
到此为止,一个简单的基于Hessian的服务就搭建好了。下面我们来进行测试一下
首先启动web应用程序,然后运行测试类
client端输出信息如下:
Server端输出信息如下:
没有问题,得到的结果正是我们想要的。Hessian入门就是这么简单。
本示例源程序下载地址: