Spring的HttpInvoker
一、概述
上两篇博客《RMI远程方式调用》、《Heasian与Spring集成》他们都有自己的缺陷,第一,RMI使用Java标准的对象序列化机制,但是很难穿透防火墙。另一个方面,Hessian和Burlap能很好的穿透防火墙,但是使用私有的对象序列化机制。
就这样Spring invoker应运而生了。HTTP invoker是一个新的远程调用模型,作为Spring框架的一部分,来执行基于HTTP的远程调用(让防火墙可以接受),并使用Java的序列化机制。
二、把Bean发布为HTTP服务
2.1、定义服务接口UserService
import java.util.List;
import com.gosun.jws.daomain.Users;
/**
* 测试Spring中配置RMI服务的接口
* @author Lenovo
*
*/
public interface UserService {
/**
* 测试返回list
* @return
*/
public List<Users> geAlltUsers();
/**
* 测试返回实体,以及传人普通参数
* @param id
* @return
*/
public Users getUser(String id);
/***
* 测试传入对象
* @param user
*/
public void save(Users user);
/**
* 测试传人集合
* @param users
*/
public void saves(List<Users> users);
}2.2、服务接口实现类
import java.util.List;
import com.gosun.jws.daomain.Users;
import com.gosun.jws.daomain.UsersFactory;
public class UserServiceImpl implements UserService {
@Override
public List<Users> geAlltUsers() {
return UsersFactory.getUsers();
}
@Override
public Users getUser(String id) {
System.out.println(id);
return UsersFactory.getUser();
}
@Override
public void save(Users user) {
System.out.println(user.toJson());
}
@Override
public void saves(List<Users> users) {
for (Users u : users) {
System.out.println(u.toJson());
}
}
}2.3、配置Spring的HttpInvokerServiceExporter和SimpleUrlHandlerMapping
<!-- 在Spring的httpInvoker服务 --> <bean id="httpInvokerUserService" class="org.springframework.remoting.httpinvoker.HttpInvokerServiceExporter"> <!--需要发布的实现类 --> <property name="service" ref="userServiceHttpInvoker" /> <property name="serviceInterface" value="com.gosun.jws.httpinvoker.UserService" /> </bean> <!-- 将特定的请求映射到具体的hessianservice --> <bean id="urlMapping1" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> <property name="mappings"> <props> <prop key="/httpInvokerUserService.service">httpInvokerUserService</prop> </props> </property> </bean> <bean id="userServiceHttpInvoker" class="com.gosun.jws.httpinvoker.UserServiceImpl" />
2.4、配置DispatcherServlet控制器
因为是基于Http的,所以 HttpInvokerServiceExporter需要实现一个Spring MVC控制器;
在web.xml中配置DispatcherServlet的代码如下:
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath:applicationContext-httpinvoker.xml
</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>*.service</url-pattern>
</servlet-mapping>这个时候启动服务器,就可以完成对 HttpInvoker服务的启动。
三、访问HttpInvoker服务
3.1、配置Spring的HttpInvokerProxyFactoryBean代码如下
在classpath路径下面新建applicationContext-httpInvoker.xml加入如下代码
<bean id="httpInvokerUserService" class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean"> <property name="serviceUrl" value="http://localhost:8080/jws/httpInvokerUserService.service"/> <property name="serviceInterface" value="com.gosun.jws.httpinvoker.UserService" /> </bean>
3.2、测试代码如下
import java.util.List;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.gosun.jws.daomain.Users;
public class ClientDemo {
public static void main(String[] args) {
ApplicationContext ac = new ClassPathXmlApplicationContext("client-application/applicationContext-httpInvoker.xml");
UserService us = (UserService) ac.getBean("httpInvokerUserService");
Users user = us.getUser("a001");
System.out.println(user.toJson());
System.out.println("----------------------------------------");
List<Users> users = us.geAlltUsers();
for (Users u : users) {
System.out.println(u.toJson());
}
System.out.println("----------------------------------------");
us.save(user);
System.out.println("----------------------------------------");
us.saves(users);
}
} 相关推荐
与卿画眉共浮生 2020-11-13
smalllove 2020-11-03
hellowordmonkey 2020-11-02
丽丽 2020-10-30
周太郎 2020-10-28
greensomnuss 2020-10-27
职业炮灰 2020-10-16
与卿画眉共浮生 2020-10-14
feinifi 2020-10-14
feinifi 2020-10-13
yangjinpingc 2020-10-09
davis 2020-09-29
RickyIT 2020-09-27
lisongchuang 2020-09-27
tangxiong0 2020-09-03
meleto 2020-08-17
幸运小侯子 2020-08-14
YangHuiLiang 2020-08-06