`

spring开发远程访问web服务

 
阅读更多
spring为各种远程访问技术的集成提供了整合类,spring支持的远程技术有以下这些:
1.远程方法调用(RMI)。通过使用RmiProxyFactoryBean和RmiServiceExporter,spring同时支持传统rmi(使用java.rmo.Remote接口和java.rmi.RemoteException)和通过RMI调用器实现的透明远程调用(支持任何java接口)
2.spring的HTTP调用器。spring提供了一种允许通过HTTP进行串行化的特殊远程调用策略,他支持任意java接口(就像rmi调用器)。相应的支持类是HttpInvokerProxyFactoryBean和HttpInvokerServiceExporter。
3.Hessian。通过HessianProxyFactoryBean和HessianServiceExporter,可以使用Caucho提供的基于HTTP轻量级二进制协议来透明的暴露服务。
4.Burlap。Burlap是caucho基于XML用来替代Hessian的项目。spring提供了诸如BurlapProxyFactoryBean和BurlapServiceExporter的支持类。
5.JAX RPC。
6.JAX-WS。
7.JMS,通过JmsInvokerServiceExporter和JmsInvokerProxyFactoryBean使用JMS作为底层协议提供远程服务。
框架

优点

缺点
rmi

全面支持java对象串行化。因此,你能够通过网络发送复杂数据类型。

rmi仅是一种java到java型远程方案。如果你拥有任何非java客户端的话,那么你无法使用它。另外,你还无法通过http协议存取对象,除非你有专门的“通道”实现rmi通讯。注意,它需要一个rmi编译器(为了生成代理和框架)和一个外部注册表(用于查询服务)。
hessian/burlap

跨防火墙工作良好

它们使用一种专利对象串行化机制。其中,burlap仅支持java客户端。它们能够串行化hibernate对象,但是对集合对象执行“惰式”加载。
http invoker

基于http的java到java remoting;通过http实现java串行化;容易建立。

服务器和客户端应用程序都需要使用spring。
仅是一种java方案。
ejb

支持remoting j2ee服务,应用程序安全以及事务处理

ejb是一种重量级技术。它要求使用一个j2ee容器。
web服务

平台和语言独立

要付出soap操作所带来的开销,并且要求使用一个web服务引擎。
下面是做一个基于HTTP调用器的demo。
首先web.xml中需要配置spring的监听和mvc的dispatcher
引用

<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>

<!--spring 启动配置 -->
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>

<!-- 配置spring service 发布服务远程访问 -->
<servlet>
<servlet-name>remoteService</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath:remote/service-exporter.xml
</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>remoteService</servlet-name>
<url-pattern>/remote/*</url-pattern>
</servlet-mapping>



然后,你可以写一个接口类和一个实现类。
引用

public interface IUserRemoteService {

public abstract String hello(String name);

}

@Service("userRemoteService")
public class UserRemoteService implements IUserRemoteService {

/* (non-Javadoc)
* @see com.huawei.iread.portal.service.remote.server.IUserRemoteService#hello(java.lang.String)
*/
public String hello(String name){
return "hello:"+name;
}

}
注意,我这里使用了spring的注解,至于注解的用法,不再详细介绍。

然后要做的就是发布服务。
引用
<bean name="/userRemoteService" class="org.springframework.remoting.httpinvoker.HttpInvokerServiceExporter">
<property name="service" ref="userRemoteService" />
<property name="serviceInterface" value="com.huawei.bportal.portal.service.remote.server.IUserRemoteService"></property>
</bean>



然后是客户端的配置
随意写一个接口,名称可以自定义,如果服务的发布使用了复杂类型的java对象,可以将服务的java对象和接口打成jar包引入到client项目中,如果是简单的字符串类型调用返回,就不必了。这是我客户端的接口,方法名和服务端的方法名保持了一致。
引用
public interface MyTestRemoteService {

String hello(String name);


}

这是xml配置
引用

<bean name="testRemoteService" class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">
<property name="serviceUrl" value="${spring.httpInvoker.uri}/userRemoteService" />
<property name="serviceInterface" value="com.huawei.bportal.portal.service.remote.client.MyTestRemoteService"></property>
<!-- 若用默认可不定义此属性 -->
    <property name="httpInvokerRequestExecutor" ref="httpInvokerRequestExecutor"></property>
</bean>
<!--  单线程
    <bean  id="httpInvokerRequestExecutor" class="org.springframework.remoting.httpinvoker.CommonsHttpInvokerRequestExecutor"> 
        <property  name="httpClient"> 
            <bean  class="org.apache.commons.httpclient.HttpClient"> 
                <property   name="connectionTimeout"  value="2000" /> 
                <property  name="timeout"  value="5000" /> 
            </bean> 
        </property> 
    </bean>-->
   
    <bean  id="httpInvokerRequestExecutor" class="org.springframework.remoting.httpinvoker.CommonsHttpInvokerRequestExecutor"> 
        <property name="httpClient" ref="httpclient" />
    </bean>
    <!--  HttpClient 启用Apache HttpClient 通信
        默认实现,服务器平均10s左右才能响应一个请求。
        多线程实现,服务器平均20ms左右响应一个请求。 --> 
     <bean id="httpclient" class="org.apache.commons.httpclient.HttpClient">   
        <constructor-arg>   
            <ref bean="connectionManager"/>   
        </constructor-arg>    
    </bean> 
   
     <!-- http管理参数配置 --> 
    <bean id="connectionManager" class="org.apache.commons.httpclient.MultiThreadedHttpConnectionManager">   
        <property name="params" ref="connectionManagerParams"/>   
    </bean>  
     
    <!-- httpclient线程池 -->   
    <bean id="connectionManagerParams" class="org.apache.commons.httpclient.params.HttpConnectionManagerParams"> 
        <!-- 设置 连接超时时间(毫秒),默认为0不使用 -->   
        <property name="connectionTimeout" value="5000"/>  
        <!-- 设置 读取数据超时(毫秒),默认为0不使用 -->  
        <property name="soTimeout" value="10000"/>   
        <!-- 设置默认的连接数量最大允许对一个给定的主机配置 --> 
        <property name="maxTotalConnections" value="30"/> 
        <!-- 允许的最大连接数 -->   
        <property name="defaultMaxConnectionsPerHost" value="20"/>   
    </bean>

其中${spring.httpInvoker.uri}是服务端的地址,ip加端口号。

下面的调用的方法
引用
//注入来自server端的接口
@Autowired @Qualifier("testRemoteService")
private MyTestRemoteService remoteService;

public String showUser() {
logger.info("测试spring-rmi:"+remoteService.hello("aaaa"));
return SUCCESS;
}
返回hello aaaa就基本成功了完成了
分享到:
评论

相关推荐

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

    Spring远程访问通过使用普通POJOs,能更容易的开发远程访问服务。目前,Spring远程访问的主要技术如下: 1. 远程调用RMI(Remote Method Invocation): 通过使用 RmiProxyFactoryBean 和 RmiServiceExporter,并且,...

    基于Spring的远程访问与Web Service

    标题与描述中提到的主题是“基于Spring的远程访问与Web Service”,这涉及到Spring框架在企业级应用中的关键特性——即其支持多种远程服务调用的方式,包括但不限于RMI、HTTP Invoker、Hessian、Burlap、JAX-RPC以及...

    Spring 远程调用 -- C# 访问java WEB 服务

    本示例聚焦于一个具体的场景:使用C#客户端远程调用基于Spring框架的Java Web服务。以下将详细阐述涉及的技术点。 首先,Spring框架是Java领域的一个核心组件,尤其在企业级应用开发中广泛使用。它提供了一个全面的...

    Spring应用开发实战Web Service WS

    1. **Spring支持的远程访问技术**:Spring框架支持多种远程访问技术,包括RMI(Remote Method Invocation)、JAX-RPC(Java API for XML-based Remote Procedure Call)、Hessian、Burlap、XFire以及Spring自带的...

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

    Spring Web Services 是基于 Spring 框架的 Web 服务框架,主要侧重于基于文档驱动的Web服务,提供 SOAP 服务开发,允许通过多种方式创建 Web 服务。本章利用Apache CXF构建和开发webservice. 1. webservice远程...

    Web技术:实验二-基于 Spring+SpringMVC 的 web 系统设计

    它还包含了对事务管理、数据访问/集成、远程访问、声明式缓存等的支持,以及用于简化企业级应用开发的各种工具。 2. **SpringMVC**: SpringMVC 是 Spring 框架的一部分,用于构建 Web 应用的模型视图控制器。它...

    Spring集成Cxf调用WebServices

    这样,Spring会自动创建一个客户端代理,可以通过这个代理调用远程Web服务。 6. **CxfSpringClient**:根据提供的文件名,这可能是一个示例项目或者代码,展示了如何在Spring环境中配置和使用CXF客户端。可能包含...

    Spring整合Hessian访问远程服务

    4. **发布服务**:将服务部署到Web服务器,如Tomcat,这样客户端就可以通过HTTP访问Hessian服务。 5. **创建Hessian客户端**:在客户端,我们需要创建一个HessianProxyFactoryBean,指定远程服务的URL和接口类型。 ...

    使用Spring构建Restful的Web服务.pdf

    - **Spring MVC**:Spring MVC框架用于构建Web应用程序,支持RESTful Web服务的开发。 - **Spring Boot**:简化了Spring应用的初始搭建以及开发过程,提供了一系列的默认配置,便于快速开发。 #### 架构与数据模型 ...

    spring开发手册

    10. **Web服务**:Spring Web Services模块提供了创建和消费SOAP服务的能力,同时支持WSDL-first和代码-first的开发方式。 通过深入学习这本《Spring2.x 开发手册》,开发者不仅可以掌握Spring的基本用法,还能理解...

    Spring远程调用使用http方式

    在IT行业中,Spring框架是Java开发中的一个核心组件,它提供了丰富的功能,包括依赖注入、AOP(面向切面编程)以及模块化的服务支持。在分布式系统中,远程调用是一个常见需求,允许不同的服务之间进行通信。本篇...

    在 Spring Web Flow 项目中应用 Hessian 服务

    3. **创建Hessian客户端**:在Spring Web Flow的客户端,我们需要创建一个`HessianProxyFactoryBean`,设置远程服务的URL和接口类型,这样就能生成一个可以调用远程方法的代理对象。 4. **在SWF中使用Hessian服务**...

    Spring开发指南

    Spring开发指南是一份详细指导如何使用Spring框架进行Java开发的文档。Spring框架是由Rod Johnson创建,并且在设计上主张实用主义,它基于Interface21开发包改造而来,旨在创建一个更开放、清晰、全面和高效的开发...

    SPRING开发指南.pdf

    此外,Spring框架还包含对消息传递(如JMS)、任务调度、缓存、远程服务调用等多种企业级服务的支持。Spring Boot的出现进一步简化了基于Spring的应用程序的启动和配置,通过默认配置和起步依赖,极大地加速了开发...

    最新最全的spring开发包

     这个jar文件包含Web应用开发时,用到Spring框架时所需的核心类,包括自动载入WebApplicationContext特性的类、Struts与JSF集成类、文件上传的支持类、Filter类和大量工具辅助类。 (12) spring-webmvc.jar 这个...

    Spring+webservice例子

    在IT行业中,Spring框架和Web服务(Web Service)是两个重要的技术领域,它们在构建分布式系统和企业级应用中发挥着关键作用。本示例"Spring+webservice例子"聚焦于如何结合Spring框架来实现Web服务,特别是侧重于...

    Flex入门源码 远程java访问 spring集成

    Spring还提供了Web服务支持,使得其他应用程序(如Flex)可以通过HTTP或更高级的协议(如SOAP或RESTful服务)来调用Spring Bean。 集成Spring和Flex的关键步骤包括: 1. 在Spring配置中定义服务Bean,这些Bean将...

    Spring Boot 实战开发2022年

    │ 开篇词 从零开始:为什么要学习 Spring Boot?.mp4 │ 01 家族生态:如何正确理解 Spring 家族的技术体系?.mp4 │ 02 案例驱动:如何剖析一个 ...│ 24 服务测试:如何使用 Spring 测试 Web 服务层组件?.mp4

    spring 4.3 开发手册最新版

    - **Web**:提供了丰富的Web应用开发功能,包括MVC框架、远程调用、Web服务等。 - **测试**:为单元测试和集成测试提供了便利,可以方便地进行Mock操作。 #### 三、使用场景 - **企业级应用开发**:Spring框架因其...

    spring 开发工具jar包

    Spring框架是Java企业级应用开发中的主流选择,它提供了全面的基础设施支持,包括依赖注入(DI)、面向切面编程(AOP)、数据访问、事务管理、远程服务、Web应用以及测试工具等。Spring的jar包分为多个模块,每个...

Global site tag (gtag.js) - Google Analytics