1、简介:
轻量级的远程调用工具,采用的RCP二进制协议,适合于发送二进制数据。
2、简单的例子
服务器端:
•Hessian.jar 包 http://hessian.caucho.com/#Java jav版的
•设计一个接口,用来给客户端调用,并实现该接口
接口
public interface BasicAPI {
public void setGreeting(String greeting);
public String hello();
public User getUser();
public Map<Long,User> testMap();
public String check(String name,String public_key);
}
接口实现
public class BasicService implements BasicAPI{
private String _greeting = "Hello, world";
public void setGreeting(String greeting){
_greeting = greeting;
System.out.println("set greetingsuccess:"+_greeting);
}
public String hello(){
return _greeting;
}
public User getUser() {
return new User("prance");
}
public Map<Long, User> testMap() {
long aaa = System.currentTimeMillis();
Map<Long, User> map = new HashMap<Long, User>();
for (Long i = 0l; i < 100000l; i++) {
map.put(i,new User("user"+i));
}
System.out.println(System.currentTimeMillis() - aaa);
return map;
}
public String check(String name, String public_key) {
System.out.println(name+" :"+public_key);
return public_key;
}
}
•配置web.xml
<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>e.demo.BasicService</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
• 对象必须实现Serializable 接口
User 类
public class User implements Serializable{
private Long id;
private String name;
public User(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
}
对于复杂对像可以使用Map的方法传递
测试的test.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@page import="com.caucho.hessian.client.HessianProxyFactory"%>
<%@page import="e.demo.BasicAPI"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
HessianProxyFactory factory = new HessianProxyFactory();
String url = basePath+"/hello";
out.println(url);
BasicAPI basic = (BasicAPI)factory.create(BasicAPI.class,url);
out.println("Hello: " + basic.hello()+"\n");
out.println("Hello: " + basic.getUser().getName()+"\n");
out.println("Hello: " + basic.testMap().size()+"\n");
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<br>
This is my JSP page. <br>
</body>
</html>
客户端:
public class BasicClient {
public static void main(String[] args) {
Long start = System.currentTimeMillis();
BasicAPI basic = getBasicAPI();
Map<Long, User> map = basic.testMap();
for (Long l : map.keySet()) {
//System.out.println(l+" ---- "+map.get(l).getName());
}
System.out.println("-------------------"+map.size());
Long end = System.currentTimeMillis();
System.out.println(end-start);
}
public static BasicAPI getBasicAPI(){
String url = "http://localhost:8002/EasyHession/hello";
HessianProxyFactory factory = new HessianProxyFactory();
BasicAPI basic = null;
try {
basic = (BasicAPI) factory.create(BasicAPI.class, url);
} catch (MalformedURLException e) {
e.printStackTrace();
}
return basic;
}
}