hession小例子

例子一:

Hessian 介绍

注意事项
  在进行基于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: Hello, world
  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

例子二(附件是例子二的):

最近项目使用远程调用时用到了hessian,对于hessian还是处于入门阶段,大概做个资料的整理和收集。
Hessian的介绍
Hessian简单、快捷。采用的是二进制RPC协议,因为采用的是二进制协议,所以它很适合于发送二进制数据。

1、是基于什么协议实现的?
   基于Binary-RPC协议实现。

2、怎么发起请求?
  需通过Hessian本身提供的API来发起请求。

3、怎么将请求转化为符合协议的格式的?
   Hessian通过其自定义的串行化机制将请求信息进行序列化,产生二进制流。

4、使用什么传输协议传输?
  Hessian基于Http协议进行传输。

5、响应端基于什么机制来接收请求?
    响应端根据Hessian提供的API来接收请求。

6、怎么将流还原为传输格式的?
    Hessian根据其私有的串行化机制来将请求信息进行反序列化,传递给使用者时已是相应的请求信息对象了。

7、处理完毕后怎么回应?
   处理完毕后直接返回,hessian将结果对象进行序列化,传输至调用端。

附件为一个简单的Hessian示例程序,包括client和server两个工程,simpleTest为简单的远程调用,springTest用于测试spring的注入。
注意事项:
1.导入相关的jar包。commons-logging-1.1.1.jar,hessian-3.2.0.jar,log4j-1.2.9.jar,spring.jar spring-web.jar spring-webmvc.jar
2.如果hessian传递的DO对象到远程,本地的DO对象所处的包的位置应该和服务端的一致,否则会报错。接口则可以不一样,只要远程的接口中含有本地所调用的方法。
3.spring中规定远程的配置文件为为remoting-servlet.xml,取别的名称会报错误,我也是看了spring的参考手册后才改正确的。
4.在struts 2中测试时开始老是报连接失败,因为hessian远程调用时以Servlet的方式进行访问的,而我又在服务端web.xml里面配置了struts2的拦截 /* ,因此servlet被拦截了(搞了我半天)

猜你喜欢

转载自dinner-pig.iteye.com/blog/1594012