`

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 实现远程访问详解——webservice

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

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

    Spring 远程调用 -- C# 访问java WEB 服务,之前写的Demo,希望对大家有所帮帮助!

    最新最全的spring开发包

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

    Spring Boot 实战开发2022年

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

    spring 3.0 jar 所有开发包及开发项目实例

    org.springframework.context-3.0.0.M4.jar: 提供在基础IoC功能上的扩展服务,此外还提供许多企业级服务的支持,如邮件服务、任务调度、JNDI定位、EJB集成、远程访问、缓存以及各种视图层框架的封装等 org.spring...

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

    因此,就算你只是为了远程访问(例如,暴露Hessian或者 HTTP调用服务)而使用DispatcherServlet,你也得将'spring-webmvc.jar'(或者 'spring-webmvc-portlet/struts.jar')放到'spring.jar'旁边去。 Spring 2.0的 '...

    spring-framework-4-开发手册.pdf

    Spring Framework 是一个轻...Spring Framework 支 持声明式事务管理,通过 RMI 或 Web 服务远程访问你的逻辑,并支持多种选择持久化你的 数据。它提供了一个全功能的 MVC 框架,使您能够将 AOP 透明地集成到您的软件。

    Spring 2.0 开发参考手册

    17.5.2. 访问Web服务 17.5.3. 注册bean映射 17.5.4. 注册自己的处理方法 17.5.5. 使用XFire来暴露Web服务 17.6. 对远程接口不提供自动探测 17.7. 在选择这些技术时的一些考虑 18. Enterprise Java Bean(EJB)...

    基于Spring MVC、CXF和Hibernate的Web服务与数据库操作设计源码

    本源码提供了一个基于Spring MVC、CXF和Hibernate的Web服务与数据库操作设计。...这个系统通过Web服务技术(webservice)实现了对数据库数据的增删查操作,适合需要进行远程数据访问和操作的应用场景。

    Spring2.0开发参考手册

    在此基础上,Spring还提供了包括声明式事务管理,RMI或Web Services远程访问业务逻辑,以及可以多种方法进行的持久化数据库地解决方案。另外,Spring还有一个全功能的 MVC框架,并能透明的把 AOP 集成到你的软件中去...

    最新ssm项目基于spring和vue开发的web新闻流媒体平台+vue.zip

    最新SSM项目基于Spring和Vue开发的Web新闻流媒体平台Vue.zip是为新闻出版机构、自媒体人以及广大读者设计的新闻内容发布与消费平台。该项目以Spring Boot作为简化的后端技术架构,结合前端Vue.js技术,旨在提供一个...

    spring2.0开发手册

    在此基础上,Spring还提供了包括声明式事务管理,RMI或Web Services远程访问业务逻辑,以及可以多种方法进行的持久化数据库地解决方案。另外,Spring还有一个全功能的 MVC框架,并能透明的把 AOP 集成到你的软件中去...

    spring jar 包详解

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

    spring4.3.9相关jar包

    spring-context.jar(必须):这个jar 文件在基础IOC功能上为Spring 核心提供了大量扩展服务,此外还提供许多企业级服务的支持,有邮件服务、任务调度、JNDI定位,EJB集成、远程访问、缓存以及多种视图层框架的支持...

    spring4.1核心包

    在基础IOC功能上提供扩展服务,此外还提供许多企业级服务的支持,有邮件服务、任务调度、JNDI定位,EJB集成、远程访问、缓存以及多种视图层框架的支持。这个jar 文件为Spring 核心提供了大量扩展。可以找到使用...

    spring2.0中文开发参考手册

    在此基础上,Spring还提供了包括声明式事务管理,RMI或Web Services远程访问业务逻辑,以及可以多种方法进行的持久化数据库地解决方案。另外,Spring还有一个全功能的 MVC框架,并能透明的把 AOP 集成到你的软件中去...

    spring2.0开发参考手册

    在此基础上,Spring还提供了包括声明式事务管理,RMI或Web Services远程访问业务逻辑,以及可以多种方法进行的持久化数据库地解决方案。另外,Spring还有一个全功能的 MVC框架,并能透明的把 AOP 集成到你的软件中去...

    Spring-Reference_zh_CN(Spring中文参考手册)

    13.1.2. Spring Web MVC框架的特点 13.2. DispatcherServlet 13.3. 控制器 13.3.1. AbstractController 和 WebContentGenerator 13.3.2. 其它的简单控制器 13.3.3. MultiActionController 13.3.4. 命令控制器 13.4. ...

Global site tag (gtag.js) - Google Analytics