`

用Http Invoker实现RCP客户端与后台的交互

阅读更多
转:http://growup.blog.51cto.com/229061/50412

为了解决RCP客户端与后台业务层交互的问题,我找到了Spring提供的Http Invoker。给我的感觉就是:不用知道,一用吓一跳,居然会如此简单!为了确保文章简明性和程序的可运行性,我抽出了Http Invoker的基本框架,做了一个简单的演示程序来演示Http Invoker的工作过程(附源代码)。

About Http Invoker
Spring开发小组意识到在RMI服务和基于HTTP的服务(如Hessian和Burlap)之间的空白。一方面,RMI使用Java标准的对象序列化,但很难穿越防火墙;另一方面,Hessian/Burlap能很好地穿过防火墙工作,但使用自己私有的一套对象序列化机制。HTTP invoker是一个新的远程调用模型,作为Spring框架的一部分,来执行基于HTTP的远程调用(让防火墙高兴的事),并使用Java的序列化机制(让程序员高兴的事)。―――引自《Spring in Action中文版 》

还是“Grow up”的一贯风格,在开始之前先给大家看一个漂亮的演示图,从图中获得一个总体的映像,不至于一顿“神编(指埋头写代码)”后不知道自己在干啥。

从图中可以清晰的看出,客户端通过读取Invoker-client.xml(Invoker-client.xml配置内容见下面的内容)来了获得远程访问的信息,请求提供后,(如提交了:some.service),将由Web.xml中配置的dispatcherServlet来处理service请求,并把它转发到相应的组件上。服务器接受到请求后,根据Service-config的配置信息,对请求进行处理,相应用户请求。从图中可以看出客户端和服务器端必须同时提供服务的接口“IhelloService”类。至于为何要这样,如果感兴趣可以去查一下文档,但有一点非常明确,如果客户端没有与服务器对应的接口类,你将无法在你的程序中编写调用远程服务的方法。不理解没关系,这点会在稍后的介绍中继续说明。
要实现Http Invoker的完整演示,我们需要进行服务器端和客户端两部分的开发。
第一部分:服务器端的开发
1.在eclipse中新建web项目,在classpath中加入spring.jar,并拷贝到lib目录下。创建提供服务的接口类
IhelloService.java
public interface IHelloService {
 
//为了演示方便,只提供一个服务,你可以在添加你想发布的任何服务
//这个服务负责对前台传入的name说Hello
    public String doHelloService(String name);
}

2.创建接口实现类
helloServiceImpl.java
public class HelloServiceImpl implements IHelloService {
    public String doHelloService(String name) {
        return "Hello "+name + ",this is the result for your request";
    }
}

3.创建服务发布描述文件
Service-config.xml
<bean id="urlMapping"     class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
        <property name="mappings">
            <props>
                <prop key="/some.service">serviceExporter</prop>
            </props>
        </property>
</bean>
<!—-配置要发布的服务类-->
    <bean id="helloService"
          class="edu.bjtu.invokerServer.HelloServiceImpl"/>
 
<!—-用HttpInvokerServiceExporter 发布服务-->
<bean id="serviceExporter"
class="org.springframework.remoting.httpinvoker.HttpInvokerServiceExporter">
        <property name="service" ref="helloService"/>
        <property name="serviceInterface"
               value="edu.bjtu.invokerServer.IHelloService"/>
    </bean>
</beans>

4.配置DispatcherServlet类
web.xml
    <servlet>
        <servlet-name>dispatcherServlet</servlet-name>
        <servlet-class>
           org.springframework.web.servlet.DispatcherServlet
        </servlet-class>
        <init-param>
          <param-name>contextConfigLocation</param-name>
          <param-value>/WEB-INF/service-config.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>dispatcherServlet</servlet-name>
        <url-pattern>*.service</url-pattern>
    </servlet-mapping>

完成以上工作后,服务器端的开发工作就完成了。下面用tomcat来发布这个服务,为了开发方便,我将在Tomcat的server.xml(位于%TOMCAT_HOME%conf/目录下)中配置一个虚拟路径,直接指向workplace中的HttpInvokerServer目录,代码如下:

<Context path="/invoker" docBase="D:\j2ee\workspace\HttpInvokerServer\WebContent" reloadable="true" debug="0" />


第二部分,客户端的开发
1.  在eclipse中新建项目,在classpath中加入spring.jar,并拷贝到lib目录下。把前面创建的接口类IhelloService拷贝到相应的包下。
2.InvokerClient.java
import org.springframework.context.ApplicationContext;
import org.springframework.context.
              support.ClassPathXmlApplicationContext;
 
public class InvokerClient {
    public static void main(String[] args) {
        ApplicationContext context =
            new ClassPathXmlApplicationContext(
                    "invoker-client.xml");
//在此引入了服务接口类,只有在客户端有了这个接口类,才能调用远程的服务。
        IHelloService service =
            (IHelloService) context.getBean("helloServiceProxy");
        String result = service.doHelloService("ZHAO YUAN");
        System.out.println(result);
    }
}

3.创建invoker-client.xml
   <!-- 客户端能够使用下面的代理连接到远程服务 -->
    <bean id="helloServiceProxy"
          class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">
        <property name="serviceUrl"
           value="http://59.64.8.33:8080/invoker/some.service"/>
        <property name="serviceInterface"
            value="edu.bjtu.invoker.IHelloService"/>
    </bean>
   <!-- 注意serviceUrl的值,这是一个标准的http请求。如果在本机测试可以把IP地址改成localhost -->
</beans>


第三步,运行演示

启动Tomcat服务器,可以直接在eclipse中运行InvokerClient.java,此时在控制台输出:
Hello ZHAO YUAN, this is the result for your request
如果你看到输出,表示你成功了。
通过上面的演示我们已经实现了http invoker的前后台通信,我们可以把客户端调用的代码嵌入到RCP中,这样就可以实现RCP与后台服务的交互。这在理论和实践上都是没有问题的,但是因为各自项目的需求不同,在实际开发中你仍会遇到很多问题, 这就要考验你解决问题的能力了。
在以后的文章中我会接续就RCP中使用http invoker进行讨论。
为了大家能以最快的速度获得一个感性的认识,我把文中的源代码附上,希望能对你有所帮助。源代码在MyEclipse5.1.1,apache-tomcat-5.5.17上测试通过
分享到:
评论
1 楼 413277409 2011-11-28  

相关推荐

    http invoker 做post测试

    HTTP Invoker 是一个Java框架,主要用于在分布式系统中进行远程方法调用(RPC)。它通过HTTP协议提供服务,使得客户端可以像...同时,了解如何正确地配置和使用HTTP Invoker进行测试,是提升开发效率和产品质量的关键。

    使用httpInvoker提供远程服务

    【使用httpInvoker提供远程服务】 在分布式系统中,远程服务调用是常见的需求,Spring框架提供了多种远程服务支持,其中包括HttpInvoker。HttpInvoker是Spring框架的一部分,它允许开发者使用HTTP协议进行远程方法...

    HttpInvoker.zip http调试工具

    通过使用HttpInvoker,我们可以更有效地调试Web应用,提高开发效率,解决复杂问题。无论你是新手还是经验丰富的开发者,掌握HttpInvoker的使用都将对你的Web开发事业大有裨益。在日常工作中,不妨尝试利用...

    springboot-httpinvoker-demo.zip

    《SpringBoot HTTP Invoker 深度解析与实践》 在现代Java开发中,Spring Boot以其简洁、快速的特性受到了广大开发者的喜爱。而在微服务架构中,服务间通信是必不可少的一部分,HTTP Invoker作为Spring框架的一个...

    httpinvoker.zip

    - 功能测试:在APP开发过程中,可以使用HTTP Invoker测试后台接口,确保功能正常。 - 性能测试:模拟大量并发请求,评估服务器的负载能力。 - API调试:快速调试API接口,检查返回数据的正确性。 4. **在小程序...

    Spring HttpInvoker的封装

    - **客户端配置**:在客户端,我们同样定义一个接口,但无需实现。而是创建一个`HttpInvokerProxyFactoryBean`,指定服务端URL和服务接口,这样就可以像调用本地方法一样调用远程服务。 ```xml ...

    Spring 实现远程访问详解——httpinvoker

    Spring httpInvoker使用标准java序列化机制,通过Http暴露业务服务。如果你的参数和返回值是比较复杂的,通过httpInvoker有巨大的优势。 1. 远程访问流程 1) 服务端定义服务接口 2) 服务端实现服务接口 3) 暴露服务...

    基于Spring的HttpInvoker实现改写egova_invoker.zip

    基于Spring的HttpInvoker实现改写服务器端调用: HttpInvoker.invoker 方法,设置InvokerProcess处理客户端调用: ProxyFactory.proxy 方法,生成接口的代理对象,直接调用方法客户端和服务器端的接口和实体类要...

    Spring HttpInvoker

    Spring HttpInvoker,是一套基于Maven+Spring+SpringMVC+MyBatis框架,还包含了Invoker的客户端及服务器端的demo实例

    spring httpInvoker示例

    在本文中,我们将深入探讨如何使用Spring框架中的HTTP Invoker组件进行远程方法调用(RMI)的实例。HTTP Invoker是Spring框架提供的一种轻量级远程调用解决方案,它利用HTTP协议在客户端和服务端之间传输Java对象。...

    Http Invoker

    **使用Http Invoker的步骤** 1. **配置请求**:首先,你需要指定请求的目标URL,选择合适的HTTP方法,并添加必要的请求参数。这可能包括查询参数、路径参数、请求头等。 2. **设置认证信息**:如果接口需要身份...

    HttpInvoker Sample

    这个"HttpInvoker Sample"是一个示例项目,旨在帮助用户理解和掌握如何在实践中使用HttpInvoker。 首先,我们来详细讲解一下HttpInvoker的工作原理。HttpInvoker的核心在于`HttpInvokerRequestExecutor`,它负责将...

    Eclipse工程Http Invoker Service & Client

    【Eclipse工程Http Invoker Service & Client】是一个基于Eclipse集成开发环境的项目,它主要涉及到了使用HTTP协议来实现服务端(Service)与客户端(Client)之间的远程调用技术。Http Invoker是Spring框架的一个...

    Hessian 、 HttpInvoker 、 XFire 、 Axis

    HttpInvoker是Spring框架的一部分,它基于HTTP协议,使用Java的序列化机制来传递对象。HttpInvoker主要面向Spring应用程序,易于集成,但相比Hessian,其数据传输效率较低,因为HTTP协议本身较重,且Java序列化也...

    httpinvoker的使用实例

    HTTPInvoker是Spring框架中的一种远程调用机制,它允许客户端通过HTTP协议来调用服务器端的方法,实现远程服务的透明化访问。这个技术基于HTTP,所以具有较好的穿透性,适用于内网或者对安全性要求不高的环境。在这...

    Spring HttpInvoker介绍

    公司内部讲义,比较了SOA,RMI和Spring HttpInvoker。并介绍了Spring HttpInvoker的基本使用方法。

    Java Spring2.5 Remote Invoke HTTP Invoker

    2. **客户端配置**:在客户端,同样需要一个Spring配置文件,创建一个`&lt;bean&gt;`,使用`http-invoker-service-ref`属性指向服务端的URL。 3. **编程模型**:客户端代码可以直接通过服务接口调用远程方法,Spring会自动...

    spring-httpinvoker-demo

    Spring HTTP Invoker是spring框架中的一个远程调用模型,执行基于HTTP的远程调用,也就是说,可以通过防火墙,并使用java的序列化机制在网络间传递对象。客户端可以很轻松的像调用本地对象一样调用远程服务器上的...

    Java Spring1.2 Remote Invoke HTTP Invoker

    6. **性能优化**:虽然HTTP Invoker相比RMI有更高的网络开销,但可以通过一些手段优化,例如使用HTTP连接池,减少HTTP请求的建立和关闭次数,或者使用GZIP压缩来减小数据传输量。 7. **故障恢复**:HTTP Invoker...

Global site tag (gtag.js) - Google Analytics