之前接触过EJB的RMI,但是个人感觉由于EJB是个重型框架,以至于你很难在项目中只使用EJB的一个两个特性来提高开发效率。近期接触到hessian,一个非常优秀的RMI轻量级框架,在此做个记录,后续会出更进阶的文章出来和大家一起分享。
翻译了hessian官网的一段介绍,希望大家会对hessian有个初步的认识。
hessian二进制web service 协议可以让web service不需要依赖一个重量级框架,也不需要使用者学习形形色色的网络协议。因为hessian就是一个二进制协议,它能够不依赖于任何扩展协议来很方便的发送二进制数据。
【实现步骤】
1、编写服务端接口
package com.lvmama.hessian.service.impl;
public interface BaseService {
public abstract void setStr(String str);
public abstract void say();
}
2、编写服务端实现
package com.lvmama.hessian.service.impl;
import com.caucho.hessian.server.HessianServlet;
public class BaseServiceImpl extends HessianServlet implements BaseService {
private String str;
public void setStr(String str) {
this.str = str;
}
public void say() {
System.out.println(str);
}
}
<servlet>
<servlet-name>baseService</servlet-name>
<servlet-class>com.caucho.hessian.server.HessianServlet</servlet-class>
<init-param>
<param-name>home-class</param-name>
<param-value>com.lvmama.hessian.service.impl.BaseServiceImpl</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>baseService</servlet-name>
<url-pattern>/baseService</url-pattern>
</servlet-mapping>
4、编写客户端测试类
package com.lvmama.hessian.client.impl;
import java.net.MalformedURLException;
import com.caucho.hessian.client.HessianProxyFactory;
import com.lvmama.hessian.service.impl.BaseService;
public class HessianClientImlp {
public static void main(String[] args) throws MalformedURLException {
String url = "http://localhost:8080/hessian_service_implement/baseService";
HessianProxyFactory factory = new HessianProxyFactory();
BaseService service = (BaseService)factory.create(BaseService.class, url);
service.setStr(" hello tony!");
service.say();
}
}
5、运行
控制台输出 hello tony!
【注意】
分析HessianServlet.java源码得知web.xml中配置param-name得配置成“home-class”或者"service-class"。要不然就会报这个错误
javax.servlet.ServletException: server must extend HessianServlet。