`
_____bEn-beN
  • 浏览: 14423 次
社区版块
存档分类
最新评论

hessian+spring(1)

 
阅读更多

 

1.1.1        spring hessian应用

 

分类:spring2012-07-26 15:10 628人阅读评论(0) 收藏举报

 

springwebservicestringjavaservlet防火墙

 

Spring目前提供了对RMI HttpInvokerHessianBurlapWebServiceRemoting技术的集成。Spring屏蔽了这些实现技术的差异,用 户只需开发简单的Java对象(Plain Old Java ObjectsPOJO)然后按照Spring规定的格式进行配置文件的编写即可。

 

一、几种Remoting实现的比较

 

Spring支持的Remoting实现技术是非常多的,虽然Spring屏蔽了这些技术使用上的差异,但是选择一个合适的Remoting技术仍然对系统有非常积极的作用,下面就来讲述这些实现技术的优缺点。

 

(1) RMIRMI使用Java的序列化机制实现调用及返回值的编组(marshal)与反编组(unmarshal),可以使用任何可序列化的对象作为参数和返回值。其缺点是RMI只能通过RMI协议来进行访问,无法通过HTTP协议访问,无法穿透防火墙。

 

(2) HessianHessian也是将网络传输的对象转换为二进制流通过Http进行传递,不过它是使用自己的序列化机制实现的编组与反编组,其支持的数据类型是有限制的,不支持复杂的对象Hessian的优点是可以透过防火墙。Hessian是一个轻量级的remoting on http工具,使用简单的方法提供了RMI的功能. 相比WebServiceHessian更简单、快捷。采用的是二进制RPC协议,因为采用的是二进制协议,所以它很适合于发送二进制数据

 

(3) BurlapBurlap是将网络传输的对象转换为XML文本格式通过Http进行传递,支持的对象与Hessian相比更少。XML一般比二进制流占用空间大,在网络上传递所需要的时间比二进制流长,XML的解析过程也会耗用更多的内存。Burlap可以穿透防火墙,而且由于传输的格式是XML文本,可以与其他系统(比如.NET)集成,从某种程度来讲,Burlap是一种不标准的WebService

 

(4) HttpInvokerHttpInvoker将参数和返回值通过Java的序列化机制进行编组和反编组,它具有RMI的支持所有可序列化对象的优点。 Http Invoker是使用Http协议传输二进制流的,而同时又具有HessianBurlap的优点

 

二、Spring中使用Hessian Remoting技术

 

使用步骤如下:

 

     1、在web.xml中的配置

 

<context-param>

 

<param-name>contextConfigLocation</param-name>

 

<param-value>

 

        /WEB-INF/config/applicationContext.xml,   

 

        /WEB-INF/Hessian-servlet.xml   

 

</param-value>

 

</context-param>

 

<servlet>

 

<servlet-name>Hessian</servlet-name>

 

<servlet-class>

 

        org.springframework.web.servlet.DispatcherServlet   

 

</servlet-class>

 

<load-on-startup>1</load-on-startup>

 

</servlet>

 

<servlet-mapping>

 

<servlet-name>Hessian</servlet-name>

 

<url-pattern>/hessian/*</url-pattern>

 

</servlet-mapping>

 

       1Hessian要求远程服务通过Servlet暴露出来,所以我们使用SpringDispatcherServlet来暴露我们的服务。

 

        2)我们必须在WEB-INF目录下创建一个文件名格式为 [Servlet Name]-servlet.xml 的配置文件,由于我们设定servlet-nameHessian,所以我们在这里创建一个名为Hessian-servlet.xml的文件。

 

    2Hessian-servlet.xml文件的配置

 

Xml代码

 

<!-- 业务类 -->

 

<beanid="hessianService"class="com.cjm.webservice.hessian.HessianServiceImpl"/>

 

<!-- 远程服务 -->

 

<beanname="/hessianService"class="org.springframework.remoting.caucho.HessianServiceExporter">

 

<propertyname="service"ref="hessianService"/>

 

<propertyname="serviceInterface">

 

<value>

 

            com.cjm.webservice.hessian.HessianService   

 

</value>

 

</property>

 

</bean>

 

1)实际业务类是通过SpringHessianServiceExporter类来暴露给客户端的。

 

        2service:指定服务对应的业务类。

 

        3serviceInterface:指定业务类实现哪个接口。Spring推荐采用面向接口编程,因此,Hessian服务建议通过接口暴露。

 

        4Hessian的远程服务名为/hessianService。笔者使用的web服务器是Tomcat-5.5.23,端口是8888web应用名为spring2,则远程服务的URL为:http://localhost:8888/spring2/hessian/hessianService

 

    3、业务类源代码

 

Java代码

 

//接口类:

 

publicinterface HessianService {   

 

public String sayHello(String username);   

 

public HessianModel getHessianModel(String username, String password);   

 

}   

 

//实现类:

 

publicclass HessianServiceImpl implements HessianService {   

 

public String sayHello(String username){   

 

return"Hello " + username;   

 

    }    

 

public HessianModel getHessianModel(String username, String password) {   

 

returnnew HessianModel(username, password);   

 

    }   

 

}   

 

//领域模型类:

 

publicclass HessianModel implements Serializable{   

 

private String username;   

 

private String password;   

 

public HessianModel(String username, String password){   

 

this.username = username;   

 

this.password = password;   

 

    }   

 

    ……   

 

 

4、客户端调用服务范例

 

         1)在Jsp页面中调用服务

 

Java代码

 

String url = "http://localhost:8888/spring2/hessian/hessianService";   

 

HessianProxyFactory factory = new HessianProxyFactory();   

 

HessianService hessianServer =    

 

            (HessianService)factory.create(HessianService.class, url);   

 

String ret = hessianServer.sayHello("Raymond.chen");   

 

out.print(ret);   

 

HessianModel model = hessianServer.getHessianModel("uid", "pwd"); 

 

out.print("username: " + model.getUsername() + "<br>"); 

 

             A)结果显示:Hello Raymond.chen

 

             B)客户端程序必须引用hessian-3.0.20.jar文件和远程服务对应的接口类。

 

             C)当调用的远程服务方法返回一个自定义类时,该自定义类必须实现Serializable接口。

 

       2)在Spring环境中调用服务

 

Xml代码

 

<beanid="testHessianService"class="org.springframework.remoting.caucho.HessianProxyFactoryBean">

 

<propertyname="serviceUrl"value="http://localhost:8888/spring2/hessian/hessianService"/>

 

<propertyname="serviceInterface"value="com.cjm.webservice.hessian.HessianService"/>

 

</bean>

 

<!- Struts2中调用服务 -->

 

<beanid="orgAction"class="com.cjm.web.action.OrganizationAction"parent="baseAction">

 

<propertyname="organizationService"ref="organizationService"/>

 

<propertyname="testHessianService"ref="testHessianService"/>

 

</bean>

 

OrganizationAction.java部分源代码:

 

Java代码

 

private HessianService testHessianService;   

 

HessianModel model = testHessianService.getHessianModel("uid", "pwd");   

 

System.out.println("username: " + model.getUsername()); 

 

        A)使用HessianProxyFactoryBean来连接服务。

 

        BserviceUrl:远程服务的URL

 

        CserviceInterface:服务对应的接口类。

 

如果需要改用Burlap,则将上面的 HessianServiceExporter改成BurlapServiceExporterHessianProxyFactory改成 BurlapProxyFactory就可以,接口和实现类的代码均不需要修改;同样如果要改用HttpInoker,只要将上面的 HessianServiceExporter改成HttpInvokerService- Exporter,将HessianProxyFactory改成HttpInvokerProxyFactoryBean就可以了。

 

 

 

分享到:
评论

相关推荐

    hessian+spring小案例

    ### Hessian+Spring小案例详解 #### 一、Hessian简介 Hessian是一个轻量级的远程服务调用框架,其核心功能是提供类似于RMI(远程方法调用)的服务,但采用的是更为高效的二进制RPC(远程过程调用协议)。这使得...

    Spring + Hessian + Spring MVC(包括Server和Client).zip

    1.名称:Spring + Hessian + Spring MVC(包括Server和Client).zip 2.来源:自己实现 3.备注:项目有两个系统,包括Server端和Client端,项目已经跑通,可以实现。 4.注意:client中pom.xml里最后的一个jar包,需要...

    Hessian和Spring集成示例

    1. **添加依赖**:在项目中引入Hessian的库,这通常通过Maven或Gradle的依赖管理来完成。确保Spring的相关库也已经包含在内。 2. **定义服务接口和服务实现**:创建一个Java接口,声明你需要暴露的服务方法。然后...

    spring+hessian+maven整合.zip

    spring+hessian+maven整合.zip

    hessian+spring

    ### Hessian与Spring整合知识点详解 #### 一、Hessian简介 Hessian是一个轻量级的远程服务调用框架,其主要特点在于采用高效的二进制格式进行数据传输,这使得它非常适合处理大量的二进制数据。Hessian通过HTTP协议...

    struts2+ibatis+spring+Hessian 整合项目

    struts2+ibatis+spring+Hessian 整合项目 web项目整合,服务端用hessian协议远程调用服务端的方法,hessian是用spring代理整合,struts2+ibatis+spring的整合项目,用作学习和开发基础平台构建很有用处,工程导入...

    SpringMVC + Mybatis + Hessian + Maven

    Spring + Mybatis + Hessian 亲自手写,附带测试用例,有问题随时提问。操作流程,自己导入sql,并修改数据库配置,配置Tomcat后启动服务,然后启动Tomcat, 最后测试用例。 测试用例步骤:步骤1.Run HessianTest. ...

    Thunder::high_voltage: Nepxion Thunder is a distribution RPC framework based on Netty + Hessian + Kafka + ActiveMQ + Tibco + Zookeeper + Redis + Spring Web MVC + Spring Boot + Docker 多协议、多组件、多序列化的分布式RPC调用框架

    Nepxion Thunder是一款基于Netty + Hessian + Kafka + ActiveMQ + Tibco + Zookeeper(Curator Framework) + Redis + FST + Spring + Spring Web MVC + Spring Boot + Docker分布式RPC调用框架。架构思想主要是来自...

    Hessian的Spring配置

    在Spring框架中,Hessian是一种轻量级的远程方法调用(RPC)协议,它能够实现Java对象到字节流的序列化,从而使得服务端的对象可以在客户端直接调用,仿佛对象就在本地一样。Hessian提供了高效的二进制RPC协议,使得...

    Hessian与Spring整合需要jar包

    1. **配置Spring**:在Spring的配置文件中定义Hessian服务的bean,通过`&lt;bean&gt;`标签声明服务接口和其实现类,使用`hessian-proxy-factory-bean`来创建Hessian服务的代理。 2. **暴露Hessian服务**:通过Spring的`...

    OSGI+SpringDM+Hessian

    标题 "OSGI+SpringDM+Hessian" 涉及到三个重要的技术概念,它们分别是OSGI(Open Services Gateway Initiative)、SpringDM(Spring Dynamic Modules)和Hessian。这些技术在Java开发领域中都有其独特的应用和价值。...

    hessian与spring整合的jar包

    当我们将Hessian与Spring进行整合时,主要目标是利用Spring的依赖注入(Dependency Injection, DI)和组件管理能力来简化Hessian服务的创建和管理。以下是一些关键知识点: 1. **Spring核心模块**(spring-core-...

    Struts2+mybatis3+spring3整合

    1. 添加Student:在Action中调用Service,Service再调用DAO,执行SQL插入新Student到数据库。 2. 查询Student:Action通过Service获取所有或特定条件下的Student列表,然后返回到视图展示。 3. 删除Student:Action...

    Hessian与spring整合

    1. **服务提供者(Service Provider)**:首先,我们需要在服务端创建一个Spring Bean,这个Bean包含我们要暴露给客户端调用的方法。Spring会管理这个Bean的生命周期,包括初始化、依赖注入以及销毁等。 2. **...

    hessin+spring实例

    ### Hessian + Spring 实例详解 #### 一、Hessian简介 Hessian是一种轻量级的远程过程调用(RPC)协议,相比传统的WebService技术,Hessian提供了更简单且高效的方式来实现分布式应用间的通信。Hessian的核心优势在于...

    Hessian(Spring集成的)的应用与研究

    Spring框架为了提供远程服务调用的支持,将其集成到自己的服务中,使得开发者能够利用Hessian的特性来实现高效、轻量级的服务间通信。本文将深入探讨Hessian在Spring中的应用以及相关研究。 一、Hessian简介 ...

    面试专题-面试人员必看-微服务架构面试专题系列:Dubbo+Spring Boot+Spring Cloud.rar

    1. **Dubbo**:由阿里巴巴开源的高性能Java RPC框架,它为服务治理提供了强大的支持,包括服务注册、服务发现、负载均衡、容错处理等。在面试中,可能会涉及以下知识点: - 服务提供者和服务消费者的概念 - ...

    Spring中集成Hessian的问题

    在Spring框架中集成Hessian是为了实现远程方法调用(Remote Method Invocation, RMI),这是一种轻量级的序列化协议,可以高效地传输Java对象。Hessian使得服务提供者和服务消费者之间能够通过网络进行快速的数据...

    Struts2+Ibatis+Spring框架

    Struts2是一个MVC(Model-View-Controller)框架,它是Struts1的升级版,提供了更灵活和强大的功能。Struts2的核心是Action类,它负责处理用户的请求。Action与视图和模型进行交互,实现了业务逻辑与表现层的解耦。...

Global site tag (gtag.js) - Google Analytics