SpringHttpInvoker解析1-使用示例

HTTP invoker是一个新的远程调用模型,作为Spring框架的一部分,来执行基于HTTP的远程调用(让防火墙可以接受),并使用Java的序列化机制。

服务端

定义服务接口UserService

import java.util.List;  
import com.gosun.jws.daomain.Users;  
public interface UserService {  
    public List<Users> geAlltUsers();  
    public Users getUser(String id);   
    public void save(Users user);   
    public void saves(List<Users> users);   
}  

服务接口实现类

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());  
        }  
    }  
}  

配置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" />  

配置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>  

客户端

配置Spring的HttpInvokerProxyFactoryBean

<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> 

测试代码

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);  
    }  

 

posted @ 2016-11-22 11:21  wade&luffy  阅读(2105)  评论(0编辑  收藏  举报