`
sts2008
  • 浏览: 12435 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

Spring HTTP Invoker 提供远程 服务

 
阅读更多

Spring HTTP Invoker例子,Spring HTTP Invoker是spring框架中的一个远程调用模型,执行基于HTTP的远程调用,也就是说,可以通过防火墙,并使用java的序列化机制在网络间传递对象。客户端可以很轻松的像调用本地对象一样调用远程服务器上的对象,要注意的一点是,服务端、客户端都是使用Spring框架。下面通过一个例子,来讲解Spring HTTP Invoker的使用,这里使用的是Spring3.0框架。

整体流程如下:
 1.服务器端:通过Spring HTTP Invoker,将服务接口的某个实现类提供为远程服务。
 2.客户端:通过Spring HTTP Invoker代理,向服务端发送请求,远程调用服务端接口。

注意事项:由于是通过网络传输,所以服务端、客户端的POJO类,都要实现Serializable接口,进行序列化、反序列化。

 先看看服务端的配置:
 1.先提供一个服务接口

package spring.invoker.service; 

import spring.invoker.domain.UserInfo; 

/**
 
* spring http invoker例子 

* @author steven 
*/ 

public interface UserService { 

/** 

* 根据用户名,获取用户信息 

* @param userName 用户名 

* @return 返回用户信息 

*/ 

public UserInfo getUserInfobyName(String userName); 

/** 

* 根据用户名,获取用户邮箱 

* @param userName 用户名 

* @return 返回用户邮箱 

*/ 

public String getUserEmailbyName(String userName); 

}

2.再实现这个服务接口,像平时写service一样,这里只是一个简单的例子,可以在这里调用自己的DAO,查询数据库。

package spring.invoker.service.impl;

 

import spring.invoker.domain.UserInfo;

import spring.invoker.service.UserService;

 

/**

 * spring http invoker例子

 * @author steven

 *

 */

public class UserServiceImpl implements UserService{

 

     

    /**

     * 根据用户名,获取用户信息

     * @param userName  用户名

     * @return   返回用户信息

     */

    public UserInfo getUserInfobyName(String userName){

        UserInfo userInfo = new UserInfo();

        userInfo.setUserName(userName);

        userInfo.setEmail("xxx@site.com");

         

        return userInfo;

    }

    /**

     * 根据用户名,获取用户邮箱

     * @param userName  用户名

     * @return   返回用户邮箱

     */

    public String getUserEmailbyName(String userName){

        return userName + "的邮箱地址为:xxx.site.com";

    }

} 

 3.接下来,就是POJO类了,这个类一定要实现Serializable接口,并指定一个serialVersionUID。

package spring.invoker.domain;

 

import java.io.Serializable;

 

/**

 * 用户基本信息

 * @author steven

 *

 */

public class UserInfo implements Serializable {

    private static final long serialVersionUID = 1L;

    private String userName;

    private String email;

     

    public String getUserName() {

        return userName;

    }

    public void setUserName(String userName) {

        this.userName = userName;

    }

    public String getEmail() {

        return email;

    }

    public void setEmail(String email) {

        this.email = email;

    }

} 
 

4.将接口声明为HTTP Invoker服务

 

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xmlns:p="http://www.springframework.org/schema/p"

    xmlns:context="http://www.springframework.org/schema/context"

    xsi:schemaLocation="

        http://www.springframework.org/schema/beans 

        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd

        http://www.springframework.org/schema/context 

        http://www.springframework.org/schema/context/spring-context-3.0.xsd">

     

    <!-- 交给Spring管理,bean的名称是:userService -->

    <bean id="userService" class="spring.invoker.service.impl.UserServiceImpl"/>

     

    <!-- 这个配置,就是把userService接口,提供给远程调用 -->

    <bean id="httpService"

        class="org.springframework.remoting.httpinvoker.HttpInvokerServiceExporter">

        <property name="service">

            <ref bean="userService" />

        </property>

        <property name="serviceInterface"

            value="spring.invoker.service.UserService">

        </property>

    </bean>

     

    <!-- 远程服务的URL -->

    <bean

        class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">

         <property name="mappings">

            <props>

                  <prop key="/test">httpService</prop>

            </props>

        </property>

    </bean>

     

</beans>

 5.WEB-INF/web.xml:配置spring监听及DispatcherServlet

 

<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"

    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"

    id="WebApp_ID" version="2.5">

    <display-name>Spring3.0 Test Demo</display-name>

    <context-param>

        <param-name>contextConfigLocation</param-name>

        <param-value>

            /WEB-INF/dispatcher-service.xml

            /WEB-INF/dispatcher-servlet.xml

        </param-value>

    </context-param>

    <listener>

        <listener-class>

            org.springframework.web.context.ContextLoaderListener

        </listener-class>

    </listener>

    <servlet>

        <servlet-name>dispatcher</servlet-name>

        <servlet-class>

            org.springframework.web.servlet.DispatcherServlet

        </servlet-class>

        <load-on-startup>1</load-on-startup>

    </servlet>    

    <servlet-mapping>

        <servlet-name>dispatcher</servlet-name>

        <url-pattern>/</url-pattern>

    </servlet-mapping>

</web-app>

 通过以上5步,就配置好了Spring HTTP Invoker服务,地址:http://${serviceName}:${port}/${contextPath}/test



下面就是客户端怎么调用远程Spring HTTP Invoker服务。
1.创建服务接口及网络间传输的POJO类,为了方便,可以将服务器端创建好的的UserService.java和UserInfo.java拷贝到客户端,或打个jar包放到lib下。


2.配置HTTP Invoker的代理,用来调用远程服务,spring配置文件如下:

<bean id="httpService"

        class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">

        <property name="serviceUrl">

            <value>

                http://${serviceName}:${port}/${contextPath}/test

            </value>

        </property>

        <property name="serviceInterface" value="spring.invoker.service.UserService">

        </property>

    </bean>

 3. 下面是使用Spring注解的方式,当然 ,你也可以使用配置的方式,把下面的类交给Spring管理,再把httpService通过set的方式,注入进来。

package spring.invoker;

 

import javax.annotation.Resource;

 

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.RequestMapping;

import spring.invoker.service.UserService;


@Controller

public class InvokerAction {

    @Resource private UserService httpService;

    @RequestMapping(value="/httpTest")

    public void testInvoker(){

         System.out.println(httpService.getUserEmailbyName("xxx"));

    }

}
 

文章来源:http://www.juziku.com/wiki/2326.htm

分享到:
评论

相关推荐

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

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

    使用httpInvoker提供远程服务

    和Hessian的轻量级传输协议不同的是,Spring HttpInvoker使用Java序列化来序列化参数和返回值,然后基于HTTP协议传输经序列化后的对象。当参数或返回值是复杂类型,并且不能通过Hessian的序列化机制序列化时,...

    spring-httpinvoker-demo

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

    spring远程调用

    使用 spring 的 httpinvoker 进行远程调用

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

    2. Spring的HTTP调用器(Spring’s Http Invoker): Spring提供了一种特殊的允许通过HTTP进行Java串行化的远程调用策略,支持任意Java接口(就像RMI调用器)。相对应的支持类是 HttpInvokerProxyFactoryBean和 ...

    关于springframework的HttpInvokerProxyFactoryBean和HttpInvokerServiceExporter远程remoting服务项目源码下载.txt

    项目工程结构如下图所示,除了包含spring定义远程服务org.springframework.remoting.httpinvoker.*部分节点代码(红框框部分,具体设计代码部分参考相关代码示例说明文章),还包含springmvc等其他示例部分可以忽略...

    Spring 实现远程访问详解——jms和activemq

    前几章我们分别利用spring rmi、httpinvoker、httpclient、webservice技术实现不同服务器间的远程访问。本章我将通过spring jms和activemq实现单Web项目服务器间异步访问和多Web项目服务器间异步访问。 一. 简介 1. ...

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

    上两章我们分别利用Spring rmi和httpinvoker实现的远程访问功能,具体见《》和《》。本章将通过apache httpclient实现远程访问。说得简单就是直接通过spring requestmapping即请求映射url访问远程服务。 1. 远程访问...

    spring-rest-invoker:将远程REST服务映射到本地接口的Spring Invoke

    Spring休息祈求者Spring调用程序将远程JSON REST服务绑定到Java接口, 工作方式。 在这些接口上调用方法将向远程服务发出HTTP请求,并将任何对象与JSON(反序列化)。 接口和远程服务之间的具体映射可以通过编程或...

    spring jar 包详解

    (9) spring-remoting.jar 这个jar文件包含支持EJB、JMS、远程调用Remoting(RMI、Hessian、Burlap、Http Invoker、JAX-RPC)方面的类。 (10) spring-support.jar 这个jar文件包含支持缓存Cache(ehcache)、JCA、...

    远程调用服务框架

    给予spring的框架。 封装了xfire、rmi、hessian、httpinvoker 客户端可以统一调用,省略了远程调用的编码。 服务通过服务ID和服务接口来调用。

    spring security3.2.0

    Spring Security 的前身是 Acegi Security ,是 Spring 项目组中用来提供安全认证服务的...Transparent authentication context propagation for Remote Method Invocation and HttpInvoker (一个Spring远程调用协议)

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

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

    最新最全的spring开发包

     这个jar文件包含支持EJB、JMS、远程调用Remoting(RMI、Hessian、Burlap、Http Invoker、JAX-RPC)方面的类。 (10) spring-support.jar  这个jar文件包含支持缓存Cache(ehcache)、JCA、JMX、邮件服务(Java ...

    开源框架 Spring Gossip

    RMI Hessian、 Burlap Http Invoker 邮件 对于邮件发送服务的支援是由Spring的 org.springframework.mail.MailSender介面所定义,它有两个实作类别, org.springframework.mail.cos....

    Spring in Action(第2版)中文版

    第8章spring和基于pojo的远程服务 8.1spring远程调用概览 8.2与rmi一起工作 8.2.1连接rmi服务 8.2.2输出rmi服务 8.3使用hessian和burlap的远程调用 8.3.1访问hessian/burlap服务 8.3.2用hessian或burlap公开...

    Spring in Action(第二版 中文高清版).part2

    第8章 Spring和基于POJO的远程服务 8.1 Spring远程调用概览 8.2 与RMI一起工作 8.2.1 连接RMI服务 8.2.2 输出RMI服务 8.3 使用Hessian和Burlap的远程调用 8.3.1 访问Hessian/Burlap服务 8.3.2 用Hessian或...

    Spring in Action(第二版 中文高清版).part1

    第8章 Spring和基于POJO的远程服务 8.1 Spring远程调用概览 8.2 与RMI一起工作 8.2.1 连接RMI服务 8.2.2 输出RMI服务 8.3 使用Hessian和Burlap的远程调用 8.3.1 访问Hessian/Burlap服务 8.3.2 用Hessian或...

    spring in action英文版

     6.1 Spring远程调用概览  6.2 与RMI一起工作  6.2.1 连接RMI服务  6.2.2 输出RMI服务  6.3 使用Hessian和Burlap的远程调用  6.3.1 访问Hessian/Burlap服务  6.3.2 用Hessian或Burlap公开Bean的...

    09_高性能应用设计与开发技术.pptx

    选择合适的远程访问协议,比如不需要SOAP的互通性,一个简单方案(如Spring的HttpInvoker支持)将更快更简单。 对影响大部分应用程序的aspect,考虑使用AspectJ代替Spring AOP; 尽量避免使用分布式事务(基于容器...

Global site tag (gtag.js) - Google Analytics