Hessian和webservice非常类似,只是使用范围不及webservice广泛,因为其标准没有被广泛承认,但它也支持多种语言,包括java,c,c#,php等。Hessian是一个轻量级的remoting onhttp工具,使用简单的方法提供了RMI的功能. 相比WebService,Hessian更简单、快捷。采用的是二进制RPC协议,因为采用的是二进制协议,所以它很适合于发送二进制数据。
(1)在web.xml中加入:com.caucho.hessian.server.HessianServlet的类映射
<!-- hessian test-->
<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>com.caucho.hessian.server.HessianServlet</servlet-class>
<init-param>
<param-name>service-class</param-name>
<param-value>test.server.HelloImpl</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello.xsp</url-pattern>
</servlet-mapping>
(2)实现服务端test.server.HelloImpl类:
package test.server;
import java.util.Iterator;
import java.util.List;
import test.Hello;
import test.User;
public class HelloImpl implements Hello {
private String s = "来自服务端";
public String getS() {
return s;
}
public void setS(String s) {
this.s = s;
}
public String sayHello() {
return s;
}
public User getUser(Long id) {
User user = new User();
user.setId(id);
user.setName("中文姓名");
return user;
}
/**
* test for get obj from client
*/
public int client2server(User user) {
try {
System.err.println("**********************************" +user);
return 1;
} catch (Exception e) {
return -1;
}
}
public int clientList2server(List<User> list) {
System.err.println("**********************************收到来自客户端的list");
if(null != list){
System.err.println("**********************************收到来自客户端的list == " +list.size());
for (Iterator<User> it = list.iterator(); it.hasNext();) {
User user = it.next();
System.err.println(user);
}
}
return 0;
}
}
(3)客户端调用:(java)
通过访问http://localhost/DataRep.xsp可以实现访问;
String url = "http://127.0.0.1:8088/library/hello.xsp";
HessianProxyFactory factory = new HessianProxyFactory();
factory.setDebug(true);
Hello hello = (Hello)factory.create(Hello.class, url);
System.err.println(hello.sayHello());//服务端返回字符串
// System.err.println(hello.getUser(new Long(999)));//服务端返回对象
//发送对象集合给服务端
User user = null;
List<User> list = new ArrayList<User>();
for (int i = 0; i < 99; i++) {
user = new User();
user.setId(new Long(new Random().nextInt(9999)));
user.setName("我是客户端");
list.add(user);
}
System.err.println(hello.clientList2server(list));
(3)客户端调用:(c#)
添加一个引用HessianCSharp.DLL
using System;
namespace HsnTest
{
public interface PlusAPI
{
string Plus2Str(int A,int B);
}
}
在Button1的Click中添加如下CODE:
private void button1_Click(object sender, System.EventArgs e)
{
CHessianProxyFactory factory = new CHessianProxyFactory();
string url="http://localhost:8080/itbabywebsvc/plus";
PlusAPI test = (PlusAPI)factory.Create(typeof(PlusAPI), url);
string sValue = test.Plus2Str(5,10);
MessageBox.Show(sValue );
}