现在的位置: 首页 > 综合 > 正文

Hessian学习与示例

2013年08月18日 ⁄ 综合 ⁄ 共 3713字 ⁄ 字号 评论关闭

名词介绍:

Hessian是一个轻量级的remoting onhttp工具,使用简单的方法提供了RMI的功能. 相比WebService,Hessian更简单、快捷。采用的是二进制RPC协议,因为采用的是二进制协议,所以它很适合于发送二进制数据。

 

注意事项:

在进行基于Hessian的项目开发时,应当注意以下几点:

▲JAVA服务器端必须具备以下几点:

包含Hessian的jar包

·设计一个接口,用来给客户端调用

·实现该接口的功能

·配置web.xml,配好相应的servlet

·对象必须实现Serializable 接口

·对于复杂对象可以使用Map的方法传递

▲客户端必须具备以下几点:

·java客户端包含Hessian.jar的包。C#中引用hessianCSharp.dll

具有和服务器端结构一样的接口。包括命名空间都最好一样

利用HessianProxyFactory调用远程接口。

 

JAVA程序示例:

服务器端:

  新建一个名EasyHession的webProject项目,将Hessian.jar放入web-inf下的lib中

  创建接口:

  packageapp.demo; 

  public interfaceBasicAPI { 

  public void setGreeting(Stringgreeting); 

  public String hello(); 

  public User getUser(); 

  } 

  实现接口:

  

    packageapp.demo; 

  publicclass BasicService implements BasicAPI { 

  privateString _greeting = "Hello, world"; 

  public void setGreeting(String greeting) 

  { 

  _greeting = greeting; 

  System.out.println("set greetingsuccess:"+_greeting);

  } 

  public String hello() 

  { 

  return _greeting; 

  } 

  public User getUser() { 

  return new User("prance", "meshow"); 

  } 

  } 

  创建一个实现Serializable的projo类也可以是Bean。

  

    package app.demo; 

  import java.io.Serializable; 

  public class User implements Serializable{ 

  String userName ="snoopy"; 

  String password ="showme"; 

  public User(Stringuser, String pwd) { 

  this.userName =user; 

  this.password= pwd; 

  } 

  public StringgetUserName() { 

  returnuserName; 

  } 

  public StringgetPassword() { 

  returnpassword; 

  } 

  } 

  接下来是配置web.xml

  <?xml version="1.0"encoding="UTF-8"?> 

  <web-app version="2.4" 

  xmlns="http://java.sun.com/xml/ns/j2ee" 

  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

  xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee

  http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

  <servlet> 

  <servlet-name>hello</servlet-name> 

  <servlet-class>com.caucho.hessian.server.HessianServlet</servlet-class>

  <init-param> 

  <param-name>service-class</param-name> 

  <param-value>app.demo.BasicService</param-value>

  </init-param> 

  </servlet> 

  <servlet-mapping> 

  <servlet-name>hello</servlet-name> 

  <url-pattern>/hello</url-pattern> 

  </servlet-mapping> 

  </web-app> 

  为了测试可以在编辑一个简单的test.jsp

  <%@ pageimport="com.caucho.hessian.client.HessianProxyFactory,

  app.demo.BasicAPI"%> 

  <%@page language="java"%> 

  <% 

  HessianProxyFactory factory = newHessianProxyFactory();

  String url = ("http://" +request.getServerName() + ":" +request.getServerPort() +

  request.getContextPath() + "/hello"); 

  out.println(url); 

  BasicAPI basic = (BasicAPI) factory.create(BasicAPI.class,url);

  out.println("Hello: " + basic.hello()); 

  out.println("Hello: " + basic.getUser() .getUserName() );

  out.println("Hello: " +basic.getUser().getPassword() );

  %> 

  将一切配置成功后,将项目发布到web 服务器上去,可以是Tomcat,Rain等等。

  进入

  结果如下:

  Hello: prance, meshow

  Hello: snoopy 

  Hello: showme 

  说明服务器端已经编写成功。

java客户端

  创建一个名为HessianClient的JAVAProject,载入hessian.jar包

  创建与服务器端一样的接口,及基础类

  public interface BasicAPI{ 

  public void setGreeting(Stringgreeting); 

  public String hello(); 

  public User getUser(); 

  } 

  import java.io.Serializable; 

  public class User implements Serializable{ 

  String userName ="snoopy"; 

  String password ="showme"; 

  public User(Stringuser, String pwd) { 

  this.userName =user; 

  this.password= pwd; 

  } 

  public StringgetUserName() { 

  returnuserName; 

  } 

  public StringgetPassword() { 

  returnpassword; 

  } 

  } 

创建客户端程序

  importcom.caucho.hessian.client.HessianProxyFactory;

  public class BasicClient { 

  public static void main(String[] args) 

  throwsException 

  { 

  String url ="http://127.0.0.1:8080/Hessian/hello";

  HessianProxyFactoryfactory = new HessianProxyFactory();

  BasicAPIbasic = (BasicAPI) factory.create(BasicAPI.class, url);

  System.out.println("Hello:" + basic.hello()); 

  System.out.println("Hello:" + basic.getUser().getUserName());

  System.out.println("Hello:" + basic.getUser().getPassword());

  basic.setGreeting("HelloGreeting"); 

  System.out.println("Hello:" + basic.hello()); 

  } 

  } 

  运行结果:

  Hello: Hello, world 

  Hello: prance 

  Hello: meshow 

  Hello: Hello Greeting

抱歉!评论已关闭.