一、Hessian 简介
Hessian是一种基于二进制Web服务协议的RPC服务,它最大的特点是一个轻量级的框架,基于二进制协议Binary-RPC,借助http进行交互的远程调用框架。因为它是一个二进制协议,它非常适合于发送二进制数据,而无需任何需要扩展的协议与附件。Binary-RPC 是一种和 RMI 类似的远程调用的协议,它和 RMI 的不同之处在于它以标准的二进制格式来定义请求的信息 ( 请求的对象、方法、参数等 ) ,这样做的好处是在跨语言通讯的时候也可以使用。
下图是Hessian官网的截图,目前已经支持多种语言:http://hessian.caucho.com/
二、Hessian环境准备
1、下载java 版的 Hessian jar 包
2、准备Myeclipse开发一个servlet工程
三、Hessian服务端 开发步骤
1、创建一个服务接口java类
2、实现这个服务接口
3、配置web.xml (这步是核心,前面2步和普通的servlet没有区别,配置web.xml时,需要继承HessianServlet 接口
4、发布运行
四、Hessian客户端开发步骤
1、需要接口类
2、通过HessianProxyFactory 获取代理工厂
3、通过这个代理工厂创建客户端对服务端操作的对象
4、调用服务端暴露的方法
五、Hessian的Demo实例
1、服务端Demo
1) 创建一个web 工程, StudyHessian,并在这个工程里面,创建一个服务接口 Hello.java
package com.hessian.demo;
public interface Hello {
String sayHello(String name);
String getName ( );
}
2) 实现Hello的接口 HelloImpl.java
package com.hessian.demo;
public class HelloImpl implements Hello{
String myName="null";
/*
* 实现接口Hello的方法,传入名字,赋值给成员变量后,返回 hello,名字
* @see com.hessian.demo.Hello#saytHello(java.lang.String)
*/
public String sayHello(String name){
myName = name;
return "hello,"+name+"! ";
}
/*
* 实现接口类,获取名字
* @see com.hessian.demo.Hello#getName()
*/
public String getName ( ){
return myName;
}
}
3) 编写web.xml并发布
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>StudyHessian</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>StudyHessian</servlet-name>
<servlet-class>com.caucho.hessian.server.HessianServlet</servlet-class>
<init-param>
<param-name>service-class</param-name>
<param-value>com.hessian.demo.HelloImpl</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>StudyHessian</servlet-name>
<url-pattern>/HelloServiceDemo</url-pattern>
</servlet-mapping>
</web-app>
这里会有显示错误,不过不影响发布。应该是J2EE版本的问题
修复办法:
将 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"里面的 javaee 修改 j2ee 就可以了
4)运行并查看,出现下面内容,说明服务端已经正常
服务端日志如下:
信息: Deploying web application directory E:\cwqwork\MyEclipse_Workspace\.metadata\.me_tcat7\webapps\StudyHessian
十二月 13, 2016 7:36:00 下午 org.apache.coyote.AbstractProtocol start
信息: Starting ProtocolHandler ["http-bio-8080"]
十二月 13, 2016 7:36:00 下午 org.apache.coyote.AbstractProtocol start
信息: Starting ProtocolHandler ["ajp-bio-8009"]
十二月 13, 2016 7:36:00 下午 org.apache.catalina.startup.Catalina start
信息: Server startup in 1941 ms
URL验证:
2、客户端编写 HelloHessianClient.java
package com.hessian.demo.client;
import java.net.MalformedURLException;
import com.caucho.hessian.client.HessianProxyFactory;
import com.hessian.demo.Hello;
public class HelloHessianClient {
public static void main(String[] args) {
//服务端映射的访问URL地址
String url = "http://127.0.0.1:8080/StudyHessian/HelloServiceDemo";
HessianProxyFactory factory = new HessianProxyFactory();
Hello helloService = null;
try {
helloService = (Hello) factory.create(Hello.class, url);
}
catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//调用接口的sayHello方法
System.out.println(helloService.sayHello( "boy" ) );
//调用服务器端的HelloImpl类中的getName方法
System.out.println(helloService.getName());
}
}
3.运行客户端,客户端显示如下内容: