zoukankan      html  css  js  c++  java
  • 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);  
        }  
  • 相关阅读:
    面试只要问到分布式,必问分布式锁
    Java编程中忽略这些细节,Bug肯定找上你
    不止承上启下,带你了解工业物联网关
    论文解读二十七:文本行识别模型的再思考
    并发高?可能是编译优化引发有序性问题
    论文解读丨LayoutLM: 面向文档理解的文本与版面预训练
    SQL优化老出错,那是你没弄明白MySQL解释计划
    SQL反模式学习笔记1 开篇
    SQL Server中自定义函数:用指定的分隔符号分割字符串
    .NET软件开发与常用工具清单
  • 原文地址:https://www.cnblogs.com/wade-luffy/p/6088505.html
Copyright © 2011-2022 走看看