Hessian学习

本文介绍Hessian轻量级远程调用工具的特点及应用示例,包括服务器端实现和客户端调用流程,并展示了如何配置web.xml进行服务暴露。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、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());
	}

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值