`
mxsfengg
  • 浏览: 207837 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Spring remoting简单例子

    博客分类:
  • java
阅读更多

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 -->
分享到:
评论

相关推荐

    用Remoting分布式处理方式

    描述提到“自己做的一个简单的例子,适合初学者”,这表明压缩包中可能包含了一个简单的.NET Remoting应用实例,它可能是两个或更多的项目,其中一个作为服务器端(Server),另一个作为客户端(Client)。...

    spring RMI简单例子

    在这个简单的例子中,我们将深入理解Spring RMI的工作原理以及如何实现一个基本的Spring RMI应用。 首先,让我们了解RMI的基本概念。RMI允许Java对象在不同的JVM之间进行通信,仿佛它们都在同一台机器上。它通过...

    Spring.NET学习笔记20——整合Remoting(应用篇)的例子

    刘冬编写Spring.NET学习笔记20——整合Remoting(应用篇)的例子 原文:http://www.cnblogs.com/GoodHelper/archive/2009/11/19/SpringNet_Remoting.html

    spring远程调用简单实例

    本实例将深入探讨Spring的远程调用功能,通过一个简单的例子来帮助理解其工作原理和实施步骤。 首先,我们要明确Spring远程调用(Remoting)的基本概念。远程调用是指应用程序的不同组件或服务之间,通过网络进行...

    dwr和spring集成简单例子

    在这个"Dwr和Spring集成简单例子"中,我们将探讨如何将这两个强大的工具结合在一起,以便在Web应用中创建动态、交互性强的用户界面。 首先,我们需要在项目中引入DWR和Spring的相关依赖。这通常通过Maven或Gradle的...

    spring rmi 小例子

    Spring Remote Method Invocation (RMI) 是Java平台上的一个远程对象调用框架,它允许你在分布式环境中调用对象...通过理解并实践这个小例子,你将能够更好地掌握Spring RMI的用法,为构建更复杂的分布式系统打下基础。

    .Net Remoting系列(5)

    .NET Remoting是微软.NET框架中的一个核心技术,它允许在不同应用程序域(AppDomains)或不同计算机之间进行对象间通信,从而构建分布式应用程序。这个技术在.NET早期版本中扮演了核心角色,尤其对于需要跨进程或者...

    SpringRMI小例子

    Spring提供了对RMI的高级抽象,通过其`org.springframework.remoting.rmi`包,使得RMI服务的创建、配置和暴露变得更加简单。在Spring MVC项目中,我们可以将RMI服务作为一个Bean来管理,这样可以充分利用Spring的...

    spring使用注解暴露remoting服务

    在Spring框架中,注解是实现服务暴露和远程调用(Remoting)的重要方式,它极大地简化了配置,提高了代码的可读性和可维护性。本文将深入探讨如何使用注解来暴露Remoting服务,主要关注Spring的`@Service`, `@...

    Hessian:轻量级的remoting onhttp工具介绍及基于Spring2的完整实例

    在本文中,我们将深入探讨Hessian的工作原理,并通过一个基于Spring框架的完整实例来演示其应用。 一、Hessian协议概述 Hessian是由Caucho Technology开发的一种协议,它的设计思想是将远程调用的开销降到最低。...

    webservice xfire spring2.0完整实例

    - Spring通过`org.springframework.remoting.jaxws`包中的类与XFire进行集成,例如`LocalXFireWebServiceProxyFactoryBean`和`XFireWebServiceExporter`。前者用于创建Web服务客户端代理,后者用于暴露服务。 - ...

    rmi与spring整合实例

    当我们谈论“RMI与Spring整合实例”时,我们通常是指将RMI技术与Spring框架结合使用,以便构建可扩展的、分布式的Java应用程序。下面将详细解释这两个概念以及如何将它们整合在一起。 1. RMI基础: - RMI的核心...

    dwr+spring实例

    本实例"DWRSpring实例"是一个使用DWR与Spring框架结合的消息发布系统,包含了基础的CRUD(Create、Read、Update、Delete)操作。通过这个例子,我们可以深入理解DWR和Spring如何协同工作,以及它们在实际开发中的...

    xfire 与Spring完整集成实例(WebService)

    3. **理解Spring**:Spring通过其`org.springframework.remoting`包提供了对远程调用的支持,包括对Web服务的支持。Spring允许你将Web服务的实现作为一个bean进行管理,使得集成更容易。 4. **集成过程**: - **...

    Spring DWR配置实例

    Spring Direct Web Remoting (DWR) 是一个Java库,它允许Web应用程序轻松地在客户端JavaScript和服务器端Java之间进行交互。这个技术的核心功能是提供了一种机制,使得动态的、实时的Web应用成为可能,无需刷新整个...

    xfire spring例子

    这个模块允许开发者在Spring应用上下文中定义Web服务,使得服务的生命周期管理和依赖注入变得简单。集成的关键在于Spring的`&lt;bean&gt;`标签,通过它可以定义一个XFire的服务端点或客户端代理。 **配置XFire服务端点:*...

    Spring+ibatis+Dhtmlx+dwr一个简单的例子

    这个“Spring+ibatis+Dhtmlx+dwr一个简单的例子”提供了使用这些技术进行集成的实例,这对于初学者来说是一份宝贵的参考资料。下面将详细解释这些技术及其在项目中的作用。 1. **Spring**:Spring 是一个开源的Java...

    Spring 2.5 jar 所有开发包及完整文档及项目开发实例

    Spring 2.5 jar 所有开发包及完整文档及项目开发实例 spring jar 包详解spring.jar是包含有完整发布的单个jar包,spring.jar中包含除了 spring-mock.jar里所包含的内容外其它所有jar包的内容,因为只有在开发环境下...

    flex整合spring的例子

    这个例子旨在展示如何在Flex前端与Spring后端之间建立通信,以便利用Spring框架的强大功能,如依赖注入、事务管理等。 首先,Flex是一个基于ActionScript和Flash Player的开源框架,用于创建交互式的、基于Web的富...

    Flex4 spring整合实例

    Flex应用需要配置一个Remoting Destination,指向Spring服务代理。 3. **设置BlazeDS配置**:在Tomcat或其他应用服务器的Web-INF下创建flex-config.xml文件,配置BlazeDS连接到Spring服务的通道。 4. **数据序列化...

Global site tag (gtag.js) - Google Analytics