初试Hessian记

来源:互联网 发布:域名注册方法 编辑:程序博客网 时间:2024/05/01 11:44

Hessian下载地址:http://hessian.caucho.com/#Java

服务端:

com.caucho.hessian.server.HessianServlet

 

Web 服务是通过在 Web 服务器上部署 Servlet 来提供的。在 HessianServlet 的初始化配置中,参数 home-api 用来指定该 Web service 能够提供的服务,参数 home-class 用来指定提供具体服务的类,也即实现了 home-api 所指定接口的类。如果需要提供多个服务,可以部署多个 HessianServlet,并指定相应的 home-api 和 home-class 参数。

HessianServlet 是一个普通的 Servlet。主要接收来自 Hessian 客户端的请求,并将来自客户端 InputStream 和 OutputStream 包装成 Hessian 自己的 Input 和 Output,然后调用 HessianSkeleton 类处理客户的请求、并将处理结果返回给客户端。在初始化的过程中,HessianServlet 会根据参数 home-class 创建一个相应的实例,作为背后真正的 Web 服务提供者相应客户端的请求。
HessianSkeleton 解析来自客户端所请求的方法和参数信息,利用 Java 中的反射机制,调用由 HessianServlet 在初始化过程中创建的 Web 服务实例中对应的方法,然后将结果返回给客户端。

web.xml

 <servlet>
  <servlet-name>Hessian</servlet-name>
  <servlet-class>com.caucho.hessian.server.HessianServlet</servlet-class>
  <init-param>
   <param-name>home-api</param-name>
   <param-value>com.dao.BaseService</param-value>
  </init-param>
  <init-param>
   <param-name>home-class</param-name>
   <param-value>com.dao.BaseServiceImpl</param-value>
  </init-param>
 </servlet>
 <servlet-mapping>
  <servlet-name>Hessian</servlet-name>
  <url-pattern>/hello</url-pattern>
 </servlet-mapping>

BaseService.java

package com.dao;

public interface BaseService {
 public String say(String name);
}

 

BaesServiceImpl.java

package com.dao;

public class BaseServiceImpl implements BaseService {

 public String say(String name) {
  return "Hello"+name;
 }

}

 

 

客户端:

客户端主要使用了 Java 的动态代理机制。当客户端使用 HessianProxyFactory 创建一个实例时,并不是真正创建了一个 Web 服务接口类型的实力,而是创建了一个 Java 代理实例。随后在调用 Web 服务接口的方法时,实现了 InvocationHandler 接口的 HessianProxy 类将方法名称、参数等信息通过 HttpURLConnection 发送给 Web service 服务器,然后处理服务器的响应并将结果返回。

 

 public static void main(String[] args) throws Exception {
  String url = "http://127.0.0.1:8080/hessian/hello";   
  HessianProxyFactory factory = new HessianProxyFactory();   
  BaseService basic = (BaseService) factory.create(BaseService.class, url);      
  System.out.println("Hello: " + basic.say("SY"));   
 }

 

原创粉丝点击