- 浏览: 269372 次
- 性别:
- 来自: 新乡
文章分类
- 全部博客 (227)
- servciemix (10)
- db (18)
- javaTools (4)
- hibernate (31)
- web (3)
- spring (14)
- design pattern (4)
- java security (3)
- portal (1)
- ejb (6)
- session (2)
- java_lang (21)
- jbpm (29)
- struts (7)
- orgRights (2)
- project manager Jira (7)
- 跨库事务 (2)
- mysql (14)
- ubuntu (7)
- osgi (9)
- maven ant make (4)
- 分布式 高并发 高性能 (5)
- virgo-dm_server (0)
- osgi web (3)
- platform (1)
- smooks (1)
- business (1)
- 职场生涯 (14)
- Java编码格式 (2)
- web服务 (1)
- 计算机使用 (1)
- 健康工作生活的保障,工作中务必抛掉的不良心态 (4)
- 电信-网络监控 (1)
- 多线程-multithread (1)
- 海量数据-高性能 (2)
- Mybatis (1)
- web开发平台研发 (0)
- oracle (0)
- 应用服务器调优 (0)
- web前端 (0)
- servlet-jsp (0)
- tomcat (2)
- newtouch (1)
- portal_liferay (2)
- version control (1)
- apm-impact (2)
- tools (1)
- 研发管理 (1)
- 电商业务 (1)
- 生鲜电商市场调查 (0)
- PBX (0)
- 房东 (0)
最新评论
-
lifuchao:
...
权限问题 -
Branding:
谢谢,受教了,另外,CONN AS SYSDBA,必须是在操作 ...
Oracle密码忘记了怎么办? -
zhuchao_ko:
...
Portal实现原理 -
败类斯文:
不知道改哪里。。。木有见到红色。。表示悟性低了、、
jira error: Neither the JAVA_HOME nor the JRE_HOME environment variable is defin -
c__06:
正文:假如事务我是这样定义的: <tx:method n ...
Spring中Transactional配置
用Http Invoker实现RCP客户端与后台的交互 2007-11-14 01:06:29
标签:Http-Invoker RCP Spring
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。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上测试通过。
本文出自 “Grow up” 博客,请务必保留此出处http://growup.blog.51cto.com/229061/50412
0人 了这篇文章
附件下载:
演示程序源代码
标签:Http-Invoker RCP Spring
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。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上测试通过。
本文出自 “Grow up” 博客,请务必保留此出处http://growup.blog.51cto.com/229061/50412
0人 了这篇文章
附件下载:
演示程序源代码
- 229061_1194973506.rar (10.9 KB)
- 下载次数: 2
发表评论
-
Spring 动态设置数据源
2011-12-24 16:27 1491Spring 动态设置数据源 Spring数据结构Hiber ... -
用Spring+Hibernate链接时,在增删改时会报错: Write operations are not allowed in read-only mod
2011-09-11 19:53 881用Spring+Hibernate链接时,在增删改时会报错: ... -
Spring中Transactional配置
2011-09-06 13:47 8833Spring中Transactional配置 (2011-05 ... -
AndroMDA开发环境搭建
2011-04-18 17:42 1172AndroMDA开发环境搭建 翻译者:Jason S.H.C ... -
使用 Spring Roo 从零开始,一步步的创建一个简单的 Spring 程序
2011-04-07 20:30 2040使用 Spring Roo 从零开始,一步步的创建一个简单的 ... -
Spring中配置数据源的几种方法
2011-04-07 20:27 898Spring中配置数据源的几种方法 方法一(属性文件配置): ... -
详解spring事务属性
2011-03-31 15:39 806http://www.iteye.com/topic/7867 ... -
全面分析 Spring 的编程式事务管理及声明式事务管理(1)
2011-03-31 15:38 802开始之前 关于本教程 本教程将深入讲解 Spring 简 ... -
spring事务配置总结
2011-03-31 15:37 896事务代理标准写法 <!--DAO层接口实现 -- ... -
spring 事务传播
2011-03-31 15:36 882基本的六种事务传播: 1. PROPAGATION_REQU ... -
spring通过classpath加载配置文件
2011-03-31 15:35 1076在应用Spring的工程中, ... -
Spring事务配置
2011-03-31 15:34 876http://www.iteye.com/topic/6154 ... -
Spring事务管理
2011-03-31 15:33 870Spring提供了一流的事务管理。在Spring中可以支持声明 ...
相关推荐
HTTP Invoker 是一个Java框架,主要用于在分布式系统中进行远程方法调用(RPC)。它通过HTTP协议提供服务,使得客户端可以像...同时,了解如何正确地配置和使用HTTP Invoker进行测试,是提升开发效率和产品质量的关键。
【使用httpInvoker提供远程服务】 在分布式系统中,远程服务调用是常见的需求,Spring框架提供了多种远程服务支持,其中包括HttpInvoker。HttpInvoker是Spring框架的一部分,它允许开发者使用HTTP协议进行远程方法...
通过使用HttpInvoker,我们可以更有效地调试Web应用,提高开发效率,解决复杂问题。无论你是新手还是经验丰富的开发者,掌握HttpInvoker的使用都将对你的Web开发事业大有裨益。在日常工作中,不妨尝试利用...
《SpringBoot HTTP Invoker 深度解析与实践》 在现代Java开发中,Spring Boot以其简洁、快速的特性受到了广大开发者的喜爱。而在微服务架构中,服务间通信是必不可少的一部分,HTTP Invoker作为Spring框架的一个...
- 功能测试:在APP开发过程中,可以使用HTTP Invoker测试后台接口,确保功能正常。 - 性能测试:模拟大量并发请求,评估服务器的负载能力。 - API调试:快速调试API接口,检查返回数据的正确性。 4. **在小程序...
- **客户端配置**:在客户端,我们同样定义一个接口,但无需实现。而是创建一个`HttpInvokerProxyFactoryBean`,指定服务端URL和服务接口,这样就可以像调用本地方法一样调用远程服务。 ```xml ...
Spring httpInvoker使用标准java序列化机制,通过Http暴露业务服务。如果你的参数和返回值是比较复杂的,通过httpInvoker有巨大的优势。 1. 远程访问流程 1) 服务端定义服务接口 2) 服务端实现服务接口 3) 暴露服务...
基于Spring的HttpInvoker实现改写服务器端调用: HttpInvoker.invoker 方法,设置InvokerProcess处理客户端调用: ProxyFactory.proxy 方法,生成接口的代理对象,直接调用方法客户端和服务器端的接口和实体类要...
Spring HttpInvoker,是一套基于Maven+Spring+SpringMVC+MyBatis框架,还包含了Invoker的客户端及服务器端的demo实例
在本文中,我们将深入探讨如何使用Spring框架中的HTTP Invoker组件进行远程方法调用(RMI)的实例。HTTP Invoker是Spring框架提供的一种轻量级远程调用解决方案,它利用HTTP协议在客户端和服务端之间传输Java对象。...
**使用Http Invoker的步骤** 1. **配置请求**:首先,你需要指定请求的目标URL,选择合适的HTTP方法,并添加必要的请求参数。这可能包括查询参数、路径参数、请求头等。 2. **设置认证信息**:如果接口需要身份...
这个"HttpInvoker Sample"是一个示例项目,旨在帮助用户理解和掌握如何在实践中使用HttpInvoker。 首先,我们来详细讲解一下HttpInvoker的工作原理。HttpInvoker的核心在于`HttpInvokerRequestExecutor`,它负责将...
【Eclipse工程Http Invoker Service & Client】是一个基于Eclipse集成开发环境的项目,它主要涉及到了使用HTTP协议来实现服务端(Service)与客户端(Client)之间的远程调用技术。Http Invoker是Spring框架的一个...
HttpInvoker是Spring框架的一部分,它基于HTTP协议,使用Java的序列化机制来传递对象。HttpInvoker主要面向Spring应用程序,易于集成,但相比Hessian,其数据传输效率较低,因为HTTP协议本身较重,且Java序列化也...
HTTPInvoker是Spring框架中的一种远程调用机制,它允许客户端通过HTTP协议来调用服务器端的方法,实现远程服务的透明化访问。这个技术基于HTTP,所以具有较好的穿透性,适用于内网或者对安全性要求不高的环境。在这...
公司内部讲义,比较了SOA,RMI和Spring HttpInvoker。并介绍了Spring HttpInvoker的基本使用方法。
2. **客户端配置**:在客户端,同样需要一个Spring配置文件,创建一个`<bean>`,使用`http-invoker-service-ref`属性指向服务端的URL。 3. **编程模型**:客户端代码可以直接通过服务接口调用远程方法,Spring会自动...
Spring HTTP Invoker是spring框架中的一个远程调用模型,执行基于HTTP的远程调用,也就是说,可以通过防火墙,并使用java的序列化机制在网络间传递对象。客户端可以很轻松的像调用本地对象一样调用远程服务器上的...
6. **性能优化**:虽然HTTP Invoker相比RMI有更高的网络开销,但可以通过一些手段优化,例如使用HTTP连接池,减少HTTP请求的建立和关闭次数,或者使用GZIP压缩来减小数据传输量。 7. **故障恢复**:HTTP Invoker...