文档章节

Spring中HttpInvoker远程调用使用实例

方绍伟
 方绍伟
发布于 2013/10/09 15:37
字数 540
阅读 2857
收藏 8

代码结构图如下:

客户端通过Spring的HttpInvoker,完成对远程函数的调用。涉及的类有:

客户端调用User类的服务UserService,完成对实现类UserServiceImpl的addUser(User u)方法调用。其中User类为普通Pojo对象,UserService为接口,UserServiceImpl为UserService的具体实现。代码如下:
public interface UserService {
    void addUser(User u);
}

public class UserServiceImpl implements UserService {
    public void addUser(User u) {
        System.out.println("add user ["+u.getUsername()+ "] ok !!!");
    }
}

客户端调用时,主方法代码为:
public static void main(String[] args) throws Exception {
        ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext(
                new String[] {"ApplicationContext.xml" });
    
        UserService us = (UserService)ctx.getBean("ServletProxy");
        us.addUser(new User("Hook1"));
        
        UserService us2 = (UserService)ctx.getBean("UrlPathProxy");
        us2.addUser(new User("Hook2"));
    }

其调用流程用时序图可表示为:

图中粉红色表示基于Url映射方式的配置时程序的处理流程,红色表示基于Servlet配置时的处理流程。
当以示基于Url映射方式的配置时,远程系统处理请求的方式同SpringMVC的controller类似,所有的请求通过在web.xml中的org.springframework.web.servlet.DispatcherServlet统一处理,根据url映射,去对应的【servlet名称-servlet.xml】文件中,查询跟请求的url匹配的bean配置;而基于Servlet配置时,由org.springframework.web.context.support.HttpRequestHandlerServlet去拦截url-pattern匹配的请求,如果匹配成功,去ApplicationContext中查找name与servlet-name一致的bean,完成远程方法调用。

当使用URL映射配置时,实力配置如下(application-servlet.xml):
<bean name="/userHttpInvokerService" class="org.springframework.remoting.httpinvoker.HttpInvokerServiceExporter">
        <property name="service" ref="userService"/>
        <property name="serviceInterface" value="com.handou.httpinvoker.service.UserService"/>
    </bean>

web.xml文件配置:
 <servlet>
        <servlet-name>application</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
     
    <servlet-mapping>
        <servlet-name>application</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>

 如果使用基于Servlet的配置,web.xml文件配置如下:

    <!-- 基于servlet配置时使用 ,根据请求的url匹配url-pattern,如果匹配成功,去ApplicationContext
    中查找name与servlet-name一致的bean-->
    <servlet>
        <servlet-name>userHttpInvokerService</servlet-name>
        <servlet-class>org.springframework.web.context.support.HttpRequestHandlerServlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>userHttpInvokerService</servlet-name>
        <url-pattern>/UserHttpInvokerService</url-pattern>
    </servlet-mapping>

applicationContext.xml文件中配置如下:
<bean id="userService" class="com.handou.httpinvoker.service.UserServiceImpl" />
    <!--第二种配置方式 --> 
    <bean name="userHttpInvokerService" 
        class="org.springframework.remoting.httpinvoker.HttpInvokerServiceExporter">
        <property name="service" ref="userService"/>
        <property name="serviceInterface" value="com.handou.httpinvoker.service.UserService"/>
    </bean>

 

两种方式,客户端配置均相同:
<bean id="ServletProxy" 
     class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">  
     <property name="serviceUrl">  
           <value>http://localhost:8080/HttpInvoke/UserHttpInvokerService</value>  
       </property>  
       <property name="serviceInterface">  
            <value>com.handou.httpinvoker.service.UserService</value>  
        </property>  
   </bean>

具体可参考源码 :点击下载

本文转载自:http://hi.baidu.com/cpuhandou/item/04eacf0fea0bdee4f55ba662

上一篇: JOOQ学习
方绍伟
粉丝 6
博文 60
码字总数 1947
作品 0
东城
私信 提问
使用Spring HTTP invoker进行远程调用

6.4 使用Spring HTTP invoker进行远程调用 Spring 开发小组意识到在RMI服务和基于 HTTP的服务(如Hessian和Burlap)之间的空白。一方面,RMI使用Java标准的对象序列化,但很难穿越防火墙;另...

红薯
2010/08/15
5.1K
1
Spring HTTP Invoker 学习小记

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

felixlv
2013/04/05
9.2K
5
spring实现远程方法调用

spring in action一书的读书笔记 使用spring实现远程方法调用可以极大简化开发 将一个spring bean包装成为RMI service [java] view plaincopy <bean class="org.springframework.remoting.r......

张升强
2015/01/08
137
0
spring httpinvoker添加服务端安全认证策略

1 背景 正在经手的项目的web应用之间是通过spring的controller方式暴露接口,然后使用httpClient进行访问。普普通通的增删改查功能也得写上七八个方法才能实现,实在是写到心累。于是乎想要增...

GameKing
2015/05/29
506
0
《Spring技术内幕》学习笔记18——Spring使用Hessian实现远程调用

Spring目前提供了对RMI、 HttpInvoker、Hessian、Burlap及WebService等Remoting技术的集成。Spring屏蔽了这些实现技术的差异,用户只需开发简单的Java对象(Plain Old Java Objects,POJO)然后...

谜男amu
2018/05/16
40
0

没有更多内容

加载失败,请刷新页面

加载更多

高防CDN的出现是为了解决网站的哪些问题?

高防CDN是为了更好的服务网络而出现的,是通过高防DNS来实现的。高防CDN是通过智能化的系统判断来路,再反馈给用户,可以减轻用户使用过程的复杂程度。通过智能DNS解析,能让网站访问者连接到...

云漫网络Ruan
今天
12
0
聊聊Tomcat中的连接器(Connector)

上期回顾 上一篇文章《Tomcat在SpringBoot中是如何启动的》从main方法启动说起,窥探了SpringBoot是如何启动Tomcat的,在分析Tomcat中我们重点提到了,Tomcat主要包括2个组件,连接器(Conne...

木木匠
今天
8
0
OSChina 周一乱弹 —— 熟悉的味道,难道这就是恋爱的感觉

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @xiaoshiyue :好久没分享歌了分享张碧晨的单曲《今后我与自己流浪》 《今后我与自己流浪》- 张碧晨 手机党少年们想听歌,请使劲儿戳(这里)...

小小编辑
今天
2.2K
22
SpringBoot中 集成 redisTemplate 对 Redis 的操作(二)

SpringBoot中 集成 redisTemplate 对 Redis 的操作(二) List 类型的操作 1、 向列表左侧添加数据 Long leftPush = redisTemplate.opsForList().leftPush("name", name); 2、 向列表右......

TcWong
今天
42
0
排序––快速排序(二)

根据排序––快速排序(一)的描述,现准备写一个快速排序的主体框架: 1、首先需要设置一个枢轴元素即setPivot(int i); 2、然后需要与枢轴元素进行比较即int comparePivot(int j); 3、最后...

FAT_mt
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部