使用hessian实现web服务接口(一)

Hessian介绍
Hessian是一个轻量级的remoting on http工具,采用的是Binary RPC协议,所以它很适合于发送二进制数据,同时又具有防火墙穿透能力。Hessian一般是通过Web应用来提供服务,因此非常类似于平时我们用的 WebService。只是它不使用SOAP协议,但相比webservice而言更轻量级、简单、快捷。
Hessian官网:http://hessian.caucho.com/

Hessian 可通过Servlet提供远程服务,需要将匹配某个模式的请求映射到Hessian服务。也可Spring框架整合,通过它的 DispatcherServlet可以完成该功能,DispatcherServlet可将匹配模式的请求转发到Hessian服务。Hessian的server端提供一个servlet基类, 用来处理发送的请求,而Hessian的这个远程过程调用,完全使用动态代理来实现的,,建议采用面向接口编程,Hessian服务通过接口暴露。

Hessian处理过程示意图:客户端——>序列化写到输出流——>远程方法(服务器端)——>序列化写到输出流 ——>客户端读取输入流——>输出结果

具体Hessian的开发:
 使用hessian实现web服务接口(一)_第1张图片

创建HessianService接口

public interface HessianService {
	 public String sayHello(String name);
}

创建实现类HessianServiceImpl

public class HessianServiceImpl implements HessianService{

	@Override
	public String sayHello(String name) {
		return "hello,"+name;
	}

}

pom.xml中添加hessian依赖



    com.caucho
    hessian
    4.0.7

配置web.xml

 
  		
	  	hessianServiceTest
	  	 com.caucho.hessian.server.HessianServlet
	  	1
	  	
            
	  		service-class
	  		com.test.hessian.HessianServiceImpl
	  	
  
  
	  	
	  	hessianServiceTest
	  	/hs/service
  

Hessian部分源码

public void init(ServletConfig config)
/*     */     throws ServletException
/*     */   {
/* 200 */     super.init(config);
/*     */     try
/*     */     {
/* 203 */       if (this._homeImpl == null)
/*     */       {
/* 205 */         if (getInitParameter("home-class") != null) {
/* 206 */           String className = getInitParameter("home-class");
/*     */           
/* 208 */           Class homeClass = loadClass(className);
/*     */           
/* 210 */           this._homeImpl = homeClass.newInstance();
/*     */           
/* 212 */           init(this._homeImpl);
/*     */         }
/* 214 */         else if (getInitParameter("service-class") != null) {
/* 215 */           String className = getInitParameter("service-class");
/*     */           
/* 217 */           Class homeClass = loadClass(className);
/*     */           
/* 219 */           this._homeImpl = homeClass.newInstance();
/*     */           
/* 221 */           init(this._homeImpl);
/*     */         }
/*     */         else {
/* 224 */           if (getClass().equals(HessianServlet.class)) {
/* 225 */             throw new ServletException("server must extend HessianServlet");
/*     */           }
/* 227 */           this._homeImpl = this;
/*     */         }
/*     */       }
/* 230 */       if (this._homeAPI == null)
/*     */       {
/* 232 */         if (getInitParameter("home-api") != null) {
/* 233 */           String className = getInitParameter("home-api");
/*     */           
/* 235 */           this._homeAPI = loadClass(className);
/*     */         }
/* 237 */         else if (getInitParameter("api-class") != null) {
/* 238 */           String className = getInitParameter("api-class");
/*     */           
/* 240 */           this._homeAPI = loadClass(className);
/*     */         }
/* 242 */         else if (this._homeImpl != null) {
/* 243 */           this._homeAPI = findRemoteAPI(this._homeImpl.getClass());
/*     */           
/* 245 */           if (this._homeAPI == null)
/* 246 */             this._homeAPI = this._homeImpl.getClass();
/*     */         }
/*     */       }
/* 249 */       if (this._objectImpl == null)
/*     */       {
/* 251 */         if (getInitParameter("object-class") != null) {
/* 252 */           String className = getInitParameter("object-class");
/*     */           
/* 254 */           Class objectClass = loadClass(className);
/*     */           
/* 256 */           this._objectImpl = objectClass.newInstance();
/*     */           
/* 258 */           init(this._objectImpl);
/*     */         }
/*     */       }
/* 261 */       if (this._objectAPI == null)
/*     */       {
/* 263 */         if (getInitParameter("object-api") != null) {
/* 264 */           String className = getInitParameter("object-api");
/*     */           
/* 266 */           this._objectAPI = loadClass(className);
/*     */         }
/* 268 */         else if (this._objectImpl != null) {
/* 269 */           this._objectAPI = this._objectImpl.getClass();
/*     */         } }
/* 271 */       this._homeSkeleton = new HessianSkeleton(this._homeImpl, this._homeAPI);
/* 272 */       if (this._objectAPI != null) {
/* 273 */         this._homeSkeleton.setObjectClass(this._objectAPI);
/*     */       }
/* 275 */       if (this._objectImpl != null) {
/* 276 */         this._objectSkeleton = new HessianSkeleton(this._objectImpl, this._objectAPI);
/* 277 */         this._objectSkeleton.setHomeClass(this._homeAPI);
/*     */       }
/*     */       else {
/* 280 */         this._objectSkeleton = this._homeSkeleton;
/*     */       }
/* 282 */       if ("true".equals(getInitParameter("debug"))) {
/* 283 */         this._isDebug = true;
/*     */       }
/* 285 */       if ("false".equals(getInitParameter("send-collection-type")))
/* 286 */         setSendCollectionType(false);
/*     */     } catch (ServletException e) {
/* 288 */       throw e;
/*     */     } catch (Exception e) {
/* 290 */       throw new ServletException(e);
/*     */     }
/*     */   }


访问:http://localhost:8080/web-socket/hs/service
使用hessian实现web服务接口(一)_第2张图片
 

你可能感兴趣的:(java,hessian)