Spring目前提供了对RMI、HttpInvoker、Hessian、Burlap及WebService等Remoting技术的集成。Spring屏蔽了这些实现技术的差异,用户只需开发简单的Java对象(Plain Old Java Objects,POJO)然后按照Spring规定的格式进行配置文件的编写即可。
6.2.1 Hessian使用演示
【例6.1】在Spring中使用Hessian Remoting技术。
下面就来演示一下在Spring中是如何使用Hessian Remoting技术的。Hessian、Burlap、HttpInvoker等是要运行在支持Servlet的Web服务器中的,因此在运行例子之前要安装配置好Web服务器。Web服务器配置完毕以后按照下面的步骤编写代码。
(1) 编写业务接口:
// IWordProcessor业务接口
public interface IWordProcessor
{
/**
* 抽取value中的中文
* @param value
* @return
*/
public String extractChinese(String value);
}
(2) 编写实现类:
// 实现类
public class WordProcessorImpl implements IWordProcessor
{
public String extractChinese(String value)
{
Pattern p = Pattern.compile("[\\u4E00-\\u9FFF]+");
Matcher matcher = p.matcher(value);
StringBuffer sb = new StringBuffer();
while (matcher.find())
{
sb.append(matcher.group());
}
return sb.toString();
}
}
(3) 修改Web工程中的web.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application
2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<!-- 通过Spring的一个Servlet来完成对Hessian的代理 -->
<servlet>
<servlet-name>remote</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet<
/servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>remote</servlet-name>
<url-pattern>/remote/*</url-pattern>
</servlet-mapping>
</web-app>
(4) 在Web工程中添加remote-servlet.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean name="/wordProcessorBean"
class="com.cownew.Char11.Sec02.WordProcessorImpl">
</bean>
<bean name="/WordProcessorService"
class="org.springframework.remoting.caucho.HessianServiceExporter">
<property name="service">
<ref bean="wordProcessorBean" />
</property>
<property name="serviceInterface">
<value>com.cownew.Char11.Sec02.IWordProcessor</value>
</property>
</bean>
</beans>
(5) 编写客户端测试代码:
// 测试代码
package com.cownew.Char11.Sec02;
import java.net.MalformedURLException;
import com.caucho.hessian.client.HessianProxyFactory;
public class MainApp
{
public static void main(String[] args)
{
HessianProxyFactory proxyFactory = new HessianProxyFactory();
try
{
IWordProcessor service = (IWordProcessor) proxyFactory.create(
IWordProcessor.class, "http://localhost:8080/
RemoteCall/remote/WordProcessorService");
System.out.println(
service.extractChinese("人来的不少,I'm very 欣慰"));
} catch (MalformedURLException e)
{
e.printStackTrace();
}
}
}
运行结果:
人来的不少欣慰
用Web服务器来实现Remoting,确实很神奇!
如果需要改用Burlap,则将上面的HessianServiceExporter改成BurlapServiceExporter,HessianProxyFactory改成BurlapProxyFactory就可以,接口和实现类的代码均不需要修改;同样如果要改用HttpInoker,只要将上面的HessianServiceExporter改成HttpInvokerService- Exporter,将HessianProxyFactory改成HttpInvokerProxyFactoryBean就可以了。
在案例系统开发的最初阶段曾经使用Hessian实现Remoting,后来逐渐发现Hessian不能传递复杂对象的缺点,因此决定切换到Http Invoker,没想到从看资料到最终修改完毕竟然用了不到1分钟时间,其他部分完全不用修改,不得不为Spring折服。
6.2.2 几种Remoting实现的比较
Spring支持的Remoting实现技术是非常多的,虽然Spring屏蔽了这些技术使用上的差异,但是选择一个合适的Remoting技术仍然对系统有非常积极的作用,下面就来讲述这些实现技术的优缺点。
(1) RMI:RMI使用Java的序列化机制实现调用及返回值的编组(marshal)与反编组(unmarshal),可以使用任何可序列化的对象作为参数和返回值。其缺点是RMI只能通过RMI协议来进行访问,无法通过HTTP协议访问,无法穿透防火墙。
(2) Hessian:Hessian也是将网络传输的对象转换为二进制流通过Http进行传递,不过它是使用自己的序列化机制实现的编组与反编组,其支持的数据类型是有限制的,不支持复杂的对象。Hessian的优点是可以透过防火墙。
(3) Burlap:Burlap是将网络传输的对象转换为XML文本格式通过Http进行传递,支持的对象与Hessian相比更少。XML一般比二进制流占用空间大,在网络上传递所需要的时间比二进制流长,XML的解析过程也会耗用更多的内存。Burlap可以穿透防火墙,而且由于传输的格式是XML文本,可以与其他系统(比如.NET)集成,从某种程度来讲,Burlap是一种不标准的WebService。
(4) HttpInvoker:HttpInvoker将参数和返回值通过Java的序列化机制进行编组和反编组,它具有RMI的支持所有可序列化对象的优点。Http Invoker是使用Http协议传输二进制流的,而同时又具有Hessian、Burlap的优点。
经过比较,并结合案例系统的特点,HttpInvoker在众多实现技术中脱颖而出,因此案例系统的Remoting部分将使用HttpInvoker实现。
<!-- page -->
分享到:
相关推荐
描述提到“自己做的一个简单的例子,适合初学者”,这表明压缩包中可能包含了一个简单的.NET Remoting应用实例,它可能是两个或更多的项目,其中一个作为服务器端(Server),另一个作为客户端(Client)。...
在这个简单的例子中,我们将深入理解Spring RMI的工作原理以及如何实现一个基本的Spring RMI应用。 首先,让我们了解RMI的基本概念。RMI允许Java对象在不同的JVM之间进行通信,仿佛它们都在同一台机器上。它通过...
刘冬编写Spring.NET学习笔记20——整合Remoting(应用篇)的例子 原文:http://www.cnblogs.com/GoodHelper/archive/2009/11/19/SpringNet_Remoting.html
本实例将深入探讨Spring的远程调用功能,通过一个简单的例子来帮助理解其工作原理和实施步骤。 首先,我们要明确Spring远程调用(Remoting)的基本概念。远程调用是指应用程序的不同组件或服务之间,通过网络进行...
在这个"Dwr和Spring集成简单例子"中,我们将探讨如何将这两个强大的工具结合在一起,以便在Web应用中创建动态、交互性强的用户界面。 首先,我们需要在项目中引入DWR和Spring的相关依赖。这通常通过Maven或Gradle的...
Spring Remote Method Invocation (RMI) 是Java平台上的一个远程对象调用框架,它允许你在分布式环境中调用对象...通过理解并实践这个小例子,你将能够更好地掌握Spring RMI的用法,为构建更复杂的分布式系统打下基础。
.NET Remoting是微软.NET框架中的一个核心技术,它允许在不同应用程序域(AppDomains)或不同计算机之间进行对象间通信,从而构建分布式应用程序。这个技术在.NET早期版本中扮演了核心角色,尤其对于需要跨进程或者...
Spring提供了对RMI的高级抽象,通过其`org.springframework.remoting.rmi`包,使得RMI服务的创建、配置和暴露变得更加简单。在Spring MVC项目中,我们可以将RMI服务作为一个Bean来管理,这样可以充分利用Spring的...
在Spring框架中,注解是实现服务暴露和远程调用(Remoting)的重要方式,它极大地简化了配置,提高了代码的可读性和可维护性。本文将深入探讨如何使用注解来暴露Remoting服务,主要关注Spring的`@Service`, `@...
在本文中,我们将深入探讨Hessian的工作原理,并通过一个基于Spring框架的完整实例来演示其应用。 一、Hessian协议概述 Hessian是由Caucho Technology开发的一种协议,它的设计思想是将远程调用的开销降到最低。...
- Spring通过`org.springframework.remoting.jaxws`包中的类与XFire进行集成,例如`LocalXFireWebServiceProxyFactoryBean`和`XFireWebServiceExporter`。前者用于创建Web服务客户端代理,后者用于暴露服务。 - ...
当我们谈论“RMI与Spring整合实例”时,我们通常是指将RMI技术与Spring框架结合使用,以便构建可扩展的、分布式的Java应用程序。下面将详细解释这两个概念以及如何将它们整合在一起。 1. RMI基础: - RMI的核心...
本实例"DWRSpring实例"是一个使用DWR与Spring框架结合的消息发布系统,包含了基础的CRUD(Create、Read、Update、Delete)操作。通过这个例子,我们可以深入理解DWR和Spring如何协同工作,以及它们在实际开发中的...
3. **理解Spring**:Spring通过其`org.springframework.remoting`包提供了对远程调用的支持,包括对Web服务的支持。Spring允许你将Web服务的实现作为一个bean进行管理,使得集成更容易。 4. **集成过程**: - **...
Spring Direct Web Remoting (DWR) 是一个Java库,它允许Web应用程序轻松地在客户端JavaScript和服务器端Java之间进行交互。这个技术的核心功能是提供了一种机制,使得动态的、实时的Web应用成为可能,无需刷新整个...
这个模块允许开发者在Spring应用上下文中定义Web服务,使得服务的生命周期管理和依赖注入变得简单。集成的关键在于Spring的`<bean>`标签,通过它可以定义一个XFire的服务端点或客户端代理。 **配置XFire服务端点:*...
这个“Spring+ibatis+Dhtmlx+dwr一个简单的例子”提供了使用这些技术进行集成的实例,这对于初学者来说是一份宝贵的参考资料。下面将详细解释这些技术及其在项目中的作用。 1. **Spring**:Spring 是一个开源的Java...
Spring 2.5 jar 所有开发包及完整文档及项目开发实例 spring jar 包详解spring.jar是包含有完整发布的单个jar包,spring.jar中包含除了 spring-mock.jar里所包含的内容外其它所有jar包的内容,因为只有在开发环境下...
这个例子旨在展示如何在Flex前端与Spring后端之间建立通信,以便利用Spring框架的强大功能,如依赖注入、事务管理等。 首先,Flex是一个基于ActionScript和Flash Player的开源框架,用于创建交互式的、基于Web的富...
Flex应用需要配置一个Remoting Destination,指向Spring服务代理。 3. **设置BlazeDS配置**:在Tomcat或其他应用服务器的Web-INF下创建flex-config.xml文件,配置BlazeDS连接到Spring服务的通道。 4. **数据序列化...