注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Fly to the Sky!

很多人因为寂寞而错爱一个人,更多人因为错爱一个人而寂寞一生。

 
 
 

日志

 
 

转载Hession相关介绍  

2009-07-27 12:59:07|  分类: hession |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

14.5.1.1 Hessian的下载和安装

<>。下载hessian-3.0.13.jar文件。

14.5.1.2 Hessian服务器端

< interface>

<>方法声明

< name); hello(String String public>

< implements HelloImpl>

<>

<>

< + ? ?hello return   >

<>

< encoding="ISO-8859-1">

<>配置文件的文件头,包含dtd等信息-->

<>

< 2.3 Application Web DTD Inc. Microsystems, Sun ?- PUBLIC>

< dtd java.sun.com http:>

<>配置文件的根元素-->

< <!-->配置Servlet名,后面根据该名完成远程服务映射-->

< <servlet-name>hessianService<     >

<>远程服务需要HessianServlet暴露Hehes-->

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

< <!-->随应用启动而启动>

< <load-on-startup>1<>

< <!-->使用init-param配置服务的实现类-->

<>

<       param-value> <param-value>lee.HelloImpl<>

< <>

<>映射Servleturl,该Servleturl就是Hessian服务名-->

<>

< <servlet-name>hessianService<     >

< <!-->远程服务名为hessianService-->

<      url-pattern> hessianService< <url-pattern>>

<>

14.5.1.3 Hessian客户机端

< HessianClient>

< throws []args) main(String void static>

<>

<>服务的url

< url="http://localhost:8888/hessian/hessianService">

<>创建HessianProxyFactory实例

< factory="new" HessianProxyFactory>

<>获得Hessian服务的远程引用

< factory.create(Hello.class, d="(Hello)" Hello>

<>调用远程服务。

<>下面调用Hessian服务: " + d.hello("yeeku"));

<>

<>

< url="http://localhost:8888/hessian/hessianService">

< c="(HttpConnection)">

<>

< hello?,>

<>

14.5.3 使用HessianServiceExporter提供bean服务

< encoding="UTF-8">

<>配置文件的文件头,包含dtd信息-->

< DTD ?- PUBLIC BEAN SPRING beans>

< www.springframework.org ?http:>

< <!-->定义普通bean实例-->

< <bean>

< <!-->使用HessianServiceExporter 将普通bean导出成Hessian服务-->

< <bean>

< <!-->需要导出的目标bean-->

< ref="helloService" <property>

<>服务的接口-->

< <property>

<>

http://localhost:8888/hessian-spring/remoting/helloService,其中hessian-spring是该应用的urlSpring使用DispatcherServlet拦截到匹配/remoting/*的请求,然后将该请求转发到对应的bean,该beanremoting-servlet.xml文件中以HessianServiceExporter定义。

14.5.4 在客户端连接服务

Spring提供的Hessian服务是标准服务。因此,完全可以使用前面的客户端程序来访问,只需要修改urlhttp://localhost:8888/hessian-spring/remoting/helloService即可。

为了充分利用IoC特性,Spring还提供HessianProxyFactoryBean连接Hessian服务,HessianProxyFactoryBean用于连接Hessian服务,类似所有的FactoryBean,对它的请求不会返回实例本身, 而是它生成的实例。配置HessianProxyFactoryBean bean时候,只需要指定Hessian服务的url,以及Hessian服务实现的接口。详细的配置如下:

< encoding="UTF-8">

<>配置文件的文件头,包含dtd信息-->

< DTD ?- PUBLIC BEAN SPRING beans>

< www.springframework.org ?http:>

<>配置文件的根元素-->

< <!-->依赖于远程服务的测试bean-->

<>

< <!-->配置依赖注入-->

< <property>

< local="helloService" <ref    >

<>

<>

< <!-->使用HessianProxyFactoryBean 连接远程Hessian服务-->

< <bean>

< <!-->确定Hessian服务的url-->

< <property>

< <!-->确定Hessian服务实现的接口-->

< <property>

<>

Test是测试bean,该bean依赖于helloService bean,其源代码如下:

<>

<>依赖实例

< private>

<>依赖注入的setter方法

< setHello(Hello>

<>

<>

<    void test(String>

<>

<>

<>

RmiServiceExporter类似,Test的代码中没有丝毫远程访问的痕迹。Test完全不用理会Hello的底层实现。Test可以在远程服务的不同协议之间切换,甚至可以在远程服务和本地服务之间切换。

 

使用

Hessian来作为webservice服务器端和客户端将非常的简单。Hessian是个二进制的web service协议,适合于发送二进制数据。

服务器端需要做的是设计一个接口,用来给客户端调用。一个实现这个接口的类,实际的业务逻辑在这里面。然后将这个类包装成servlet,客户端通过调用这个servlet就可以了,下面是个简单的例子。

环境

      Web服务器:Tomcat5.5

      外部包:Hessian的包,这里使用的是3.0的版本

服务器端

1.       新建个接口BasicAPI,里面有两个方法,一个是hello,用来简单验证一个hello信息,另一个是getUser,用来验证传输User对象。

public interface BasicAPI {
public String hello(String user);
public User getUser();
}

2.      

新建一个实现类,实现BasicAPI接口

public class BasicService implements BasicAPI {
public String hello(String user) {
   return "hello," + user + " !";
}
public User getUser() {
   User us = new User();
   us.setUsername("zsyao");
   us.setNick("爱情烟花");
   us.setPwd1("pwd");
   us.setPwd2("pwd");
        return us;
    }
}

3.       可序列化的User

public class User implements java.io.Serializable{
private String username;

private String nick;

private String pwd1;

private String pwd2;

public String getNick() {
   return nick;
}

public void setNick(String nick) {
   this.nick = nick;
}

public String getPwd1() {
   return pwd1;
}

public void setPwd1(String pwd1) {
   this.pwd1 = pwd1;
}

public String getPwd2() {
   return pwd2;
}

public void setPwd2(String pwd2) {
   this.pwd2 = pwd2;
}

public String getUsername() {
   return username;
}

public void setUsername(String username) {
   this.username = username;
}

}

4.       新建个web工程,web.xml配置如下

<servlet>
   <servlet-name>hello</servlet-name>
   <servlet-class>com.caucho.hessian.server.HessianServlet</servlet-class>
   <init-param>
    <param-name>home-class</param-name>
    <param-value>com.zsyao.hessian.servlet.BasicService</param-value>
   </init-param>
   <init-param>
    <param-name>home-api</param-name>
    <param-value>com.zsyao.hessian.servlet.BasicAPI</param-value>
   </init-param>
</servlet>
<servlet-mapping>
   <servlet-name>hello</servlet-name>
   <url-pattern>/hello</url-pattern>
</servlet-mapping>

可以看到

web.xml里就是配置了个hessianservlet,服务器端的接口和实现类

5.      

打包发布到Tomcatwebapps目录下,启动服务器。

客户端

1.      

新建个接口,和服务器端BasicAPI一样

2.       测试代码

import com.caucho.hessian.client.HessianProxyFactory;

import java.net.MalformedURLException;

public class HessianTest {

public HessianTest() {

}

public static void main(String[] args) {
   String url = "http://localhost:8848/rssweb/hello";
   HessianProxyFactory factory = new HessianProxyFactory();
   BasicAPI basic = null;
   try {
    basic = (BasicAPI) factory.create(BasicAPI.class, url);
    System.out.println("->" + basic);
    String in = basic.hello("zhucm");
    System.out.println(in);
    System.out.println("userName = " + basic.getUser().getUsername());
   } catch (MalformedURLException ex) {
    ex.printStackTrace();
   }
}
}

结束语

可以看到使用

hessian是多么简单,简化了服务器端和客户端。不需要像使用SOAP协议时生成的一大堆的stub等相关文件,看了都心烦。

  评论这张
 
阅读(1005)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017