一、hessian简介
Hessian是一个轻量级的remoting on http工具,使用简单的方法提供了RMI(Remote Method Invocation,远程方法调用)的功能。采用的是二进制RPC(Remote Procedure Call Protocol,远程过程调用协议)协议,因为采用的是二进制协议,所以它很适合于发送二进制数据。
在进行基于Hessian的项目开发时,应当注意以下几点:
▲JAVA服务器端必须具备以下几点:
·包含Hessian的jar包。
·设计一个接口,用来给客户端调用。
·实现该接口的功能。
·配置web.xml,配好相应的servlet。
·对象必须实现Serializable 接口。
·对于复杂对像可以使用Map的方法传递。
▲客户端必须具备以下几点:
·java客户端包含Hessian.jar的包。
·具有和服务器端结构一样的接口。
·利用HessianProxyFactory调用远程接口。
二、hessian使用示例
1、服务器端代码实现
ShortUrlInfo类
package shorturl.bean;
import halo.query.annotation.Column;
import halo.query.annotation.Id;
import halo.query.annotation.Table;
import halo.query.model.BaseModel;
import java.util.Date;
@Table(name = "short_url")
public class ShortUrlInfo extends BaseModel {
@Id
@Column("id")
private int id;// 主键
/**
* 访问的uri
*/
@Column("visit_uri")
private String visit_uri;
/**
* 真实的访问地址
*/
@Column("real_url")
private String real_url;
/**
* 关系创建时间
*/
@Column("create_time")
private Date create_time;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getVisit_uri() {
return visit_uri;
}
public void setVisit_uri(String visit_uri) {
this.visit_uri = visit_uri;
}
public String getReal_url() {
return real_url;
}
public void setReal_url(String real_url) {
this.real_url = real_url;
}
public Date getCreate_time() {
return create_time;
}
public void setCreate_time(Date create_time) {
this.create_time = create_time;
}
}
ShortUrlService接口
package shorturl.service;
import shorturl.bean.ShortUrlInfo;
public interface ShortUrlService {
String createShortUrl(String urlstr);
ShortUrlInfo createShortUrl2(String urlstr);
}
ShortUrlServiceImpl类实现
package shorturl.service.impl;
import java.util.Date;
import java.util.ResourceBundle;
import org.apache.log4j.Logger;
import shorturl.bean.ShortUrlInfo;
import shorturl.service.ShortUrlService;
import shorturl.util.ShortUrlGenerator;
import com.caucho.hessian.server.HessianServlet;
@SuppressWarnings("serial")
public class ShortUrlServiceImpl extends HessianServlet implements
ShortUrlService {
private final static Logger log = Logger
.getLogger(ShortUrlServiceImpl.class);
public String createShortUrl(String urlstr) {
if (urlstr == null || urlstr.equals("")) {
return null;
}
// 生成短链接唯一标识
String short_visit_uri = ShortUrlGenerator.shortUrl();
log.info(short_visit_uri);
ShortUrlInfo sui = new ShortUrlInfo();
sui.setCreate_time(new Date());
sui.setReal_url(urlstr);
sui.setVisit_uri(short_visit_uri);
sui.create();
ResourceBundle resb1 = ResourceBundle.getBundle("app");
String urlpre = resb1.getString("url_prefix");
log.info(urlpre);
return urlpre + "/to?r=" + short_visit_uri;
}
public ShortUrlInfo createShortUrl2(String urlstr) {
if (urlstr == null || urlstr.equals("")) {
return null;
}
// 生成短链接唯一标识
String short_visit_uri = ShortUrlGenerator.shortUrl();
log.info(short_visit_uri);
ShortUrlInfo sui = new ShortUrlInfo();
sui.setCreate_time(new Date());
sui.setReal_url(urlstr);
sui.setVisit_uri(short_visit_uri);
sui.create();
ResourceBundle resb1 = ResourceBundle.getBundle("app");
String urlpre = resb1.getString("url_prefix");
log.info(urlpre);
return sui;
}
}
2、web.xml文件添加项
<!-- hessian配置文件 -->
<servlet>
<servlet-name>shorturl</servlet-name>
<servlet-class>shorturl.service.impl.ShortUrlServiceImpl</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>shorturl</servlet-name>
<url-pattern>/shorturl</url-pattern>
</servlet-mapping>
3、通过单元测试代码模拟客户端调用
package com.yibao.shortUrl;
import java.net.MalformedURLException;
import org.junit.Test;
import shorturl.bean.ShortUrlInfo;
import shorturl.service.ShortUrlService;
import com.caucho.hessian.client.HessianProxyFactory;
/**
* hession客户端调用服务器端提供的接口
*
* @author junqinghuang
* @date 2014-5-8
*/
public class TestHessian {
@Test
public void testHession() throws MalformedURLException {
String url = "http://localhost:8080/short/shorturl";
HessianProxyFactory factory = new HessianProxyFactory();
ShortUrlService urlservice = (ShortUrlService) factory.create(
ShortUrlService.class, url);
System.out.println(urlservice.createShortUrl("skjfwkgjwklgjwlegw"));
ShortUrlInfo si = urlservice.createShortUrl2("http://www.baidu.com");
System.out.print(si.getVisit_uri());
}
}