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使用标准java序列化机制,通过Http暴露业务服务。如果你的参数和返回值是比较复杂的,通过httpInvoker有巨大的优势。 1. 远程访问流程 1) 服务端定义服务接口 2) 服务端实现服务接口 3) 暴露服务...
和Hessian的轻量级传输协议不同的是,Spring HttpInvoker使用Java序列化来序列化参数和返回值,然后基于HTTP协议传输经序列化后的对象。当参数或返回值是复杂类型,并且不能通过Hessian的序列化机制序列化时,...
Spring HTTP Invoker是spring框架中的一个远程调用模型,执行基于HTTP的远程调用,也就是说,可以通过防火墙,并使用java的序列化机制在网络间传递对象。客户端可以很轻松的像调用本地对象一样调用远程服务器上的...
使用 spring 的 httpinvoker 进行远程调用
2. Spring的HTTP调用器(Spring’s Http Invoker): Spring提供了一种特殊的允许通过HTTP进行Java串行化的远程调用策略,支持任意Java接口(就像RMI调用器)。相对应的支持类是 HttpInvokerProxyFactoryBean和 ...
项目工程结构如下图所示,除了包含spring定义远程服务org.springframework.remoting.httpinvoker.*部分节点代码(红框框部分,具体设计代码部分参考相关代码示例说明文章),还包含springmvc等其他示例部分可以忽略...
前几章我们分别利用spring rmi、httpinvoker、httpclient、webservice技术实现不同服务器间的远程访问。本章我将通过spring jms和activemq实现单Web项目服务器间异步访问和多Web项目服务器间异步访问。 一. 简介 1. ...
上两章我们分别利用Spring rmi和httpinvoker实现的远程访问功能,具体见《》和《》。本章将通过apache httpclient实现远程访问。说得简单就是直接通过spring requestmapping即请求映射url访问远程服务。 1. 远程访问...
Spring休息祈求者Spring调用程序将远程JSON REST服务绑定到Java接口, 工作方式。 在这些接口上调用方法将向远程服务发出HTTP请求,并将任何对象与JSON(反序列化)。 接口和远程服务之间的具体映射可以通过编程或...
(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 Security 的前身是 Acegi Security ,是 Spring 项目组中用来提供安全认证服务的...Transparent authentication context propagation for Remote Method Invocation and HttpInvoker (一个Spring远程调用协议)
因此,就算你只是为了远程访问(例如,暴露Hessian或者 HTTP调用服务)而使用DispatcherServlet,你也得将'spring-webmvc.jar'(或者 'spring-webmvc-portlet/struts.jar')放到'spring.jar'旁边去。 Spring 2.0的 '...
这个jar文件包含支持EJB、JMS、远程调用Remoting(RMI、Hessian、Burlap、Http Invoker、JAX-RPC)方面的类。 (10) spring-support.jar 这个jar文件包含支持缓存Cache(ehcache)、JCA、JMX、邮件服务(Java ...
RMI Hessian、 Burlap Http Invoker 邮件 对于邮件发送服务的支援是由Spring的 org.springframework.mail.MailSender介面所定义,它有两个实作类别, org.springframework.mail.cos....
第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公开...
第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或...
第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或...
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的...
选择合适的远程访问协议,比如不需要SOAP的互通性,一个简单方案(如Spring的HttpInvoker支持)将更快更简单。 对影响大部分应用程序的aspect,考虑使用AspectJ代替Spring AOP; 尽量避免使用分布式事务(基于容器...