学习写代码呀

导航

spring httpinvoker 实践

spring httpinvoker是spring框架的功能,适用于spring框架项目调用另一个spring框架项目。

服务器端:ssh项目

客户端:springboot项目

服务器端配置:

public interface IHelloService {
    public String testHttpInvoker();

}

public class HelloServiceImpl implements IHelloService{

    @Override
    public String testHttpInvoker() {
        return "http invoker success";
    }

}


springbean.xml:

<?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:mvc="http://www.springframework.org/schema/mvc"
    xsi:schemaLocation="http://www.springframework.org/schema/beans           
     http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
     http://www.springframework.org/schema/mvc
      http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd">
    
     <mvc:annotation-driven/>
    
     <bean id="helloService"
        class="com.service.HelloServiceImpl">
     </bean>
     <!-- 服务器端httpinvoker 配置 -->

<!--

服务声明:

在Spring配置文件中声明一个HttpInvokerServiceExporter类的bean,共三部分:

--服务名称(如helloExporter)

--服务类型(如com.service.IHelloService)

--服务实现类 helloService-->


    <bean name="/helloExporter"
        class="org.springframework.remoting.httpinvoker.HttpInvokerServiceExporter">
        <property name="service" ref="helloService"></property>
        <property name="serviceInterface" value="com.service.IHelloService">
        </property>
     </bean>
   
     
      </beans>

 

web.xml:

<!-- 服务器端httpinvoker 配置 -->
    <servlet>
        <servlet-name>helloExporter</servlet-name>
        <servlet-class>
            org.springframework.web.servlet.DispatcherServlet
        </servlet-class>
        <init-param>
          <param-name>contextConfigLocation</param-name>
          <param-value>classpath:springbean.xml</param-value>
      </init-param>
      <load-on-startup>3</load-on-startup>
     </servlet>
     <servlet-mapping>
            <servlet-name>helloExporter</servlet-name>
            <url-pattern>/remoting/*</url-pattern>
      </servlet-mapping>

客户端配置:

package com.contorller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import com.service.IHelloService;
import com.util.SpringUtil;

@RestController
public class HelloController {
    
    @GetMapping("/testHttpinvoker")
    public String testHttpinvoker(){
        IHelloService iHelloService = SpringUtil.getBean("remoteHelloService",IHelloService.class);
        return iHelloService.testHttpInvoker();
    }
}

public interface IHelloService {
    public String testHttpInvoker();

}

package com.util;

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;
 
@Component
public class SpringUtil implements ApplicationContextAware {
 
    private static ApplicationContext applicationContext;
 
    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        if(SpringUtil.applicationContext == null) {
            SpringUtil.applicationContext = applicationContext;
        }
 
    }
 
    //获取applicationContext
    public static ApplicationContext getApplicationContext() {
        return applicationContext;
    }
 
    //通过name获取 Bean.
    public static Object getBean(String name){
        return getApplicationContext().getBean(name);
    }
 
    //通过class获取Bean.
    public static <T> T getBean(Class<T> clazz){
        return getApplicationContext().getBean(clazz);
    }
 
    //通过name,以及Clazz返回指定的Bean
    public static <T> T getBean(String name,Class<T> clazz){
        return getApplicationContext().getBean(name, clazz);
    }
 
}

application-bean.xml:

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans           
     http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
    
    <bean id="remoteHelloService" class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">
        <property name="serviceUrl" value="http://localhost:8088/sshAndRedis/remoting/helloExporter" />

<!--路径是关键,不能出错。对应服务器端servlet url-pattern,/helloExporter对应HttpInvokerServiceExporter的id-->
        <property name="serviceInterface" value="com.service.IHelloService" />
    </bean>
    
    
</beans>

@SpringBootApplication
@ImportResource(locations= {"classpath:application-bean.xml"})
public class RunApplication {
    public static void main(String[] args){
        
        SpringApplication.run(RunApplication.class, args);
    }
    
}

pom文件:

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.1.RELEASE</version>
        <relativePath/>
    </parent>

<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>
 
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

 

<properties>
        <!-- 统一源码的编码方式 -->
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <!-- spring4.3.2版本兼容jackson2.7.5版本,版本不兼容会报错找不到jackson的类 -->
        <spring.version>4.3.2.RELEASE</spring.version>
        <!-- 3.6.5  -->
        <hibernate.version>4.3.1.Final</hibernate.version>
    </properties>
  <dependencies>
 <dependency>
       <groupId>org.springframework</groupId>
       <artifactId>spring-webmvc</artifactId>
       <version>${spring.version}</version>
   </dependency>
   <!-- Spring 核心依赖 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <!-- Spring web依赖 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <!-- Spring整合ORM框架依赖 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-orm</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <!-- Hibernate 核心依赖 -->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>${hibernate.version}</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-c3p0</artifactId>
            <version>${hibernate.version}</version>
        </dependency>

        <!-- <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-ehcache</artifactId>
            <version>${hibernate.version}</version>
        </dependency> -->
        <!-- <dependency>
          <groupId>net.sf.ehcache</groupId>
          <artifactId>ehcache-core</artifactId>
          <version>2.2.0</version>
        </dependency> -->
   <!-- 解析jsp文件需要的依赖 -->
   <!-- <dependency>  
            <groupId>jstl</groupId>  
            <artifactId>jstl</artifactId>  
            <version>1.2</version>  
   </dependency> -->
   <!-- jdbcTemplate需要的依赖 -->
   <!-- <dependency>
   <groupId>org.springframework</groupId>
   <artifactId>spring-jdbc</artifactId>
   <version>3.2.8.RELEASE</version>
   </dependency> -->
   <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.25</version>
   </dependency>
   <!-- C3P0 依赖 -->
        <dependency>
            <groupId>com.mchange</groupId>
            <artifactId>c3p0</artifactId>
            <version>0.9.5</version>
            </dependency>        
  <!-- jedis依赖 -->
        <!-- <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>2.7.1</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-redis</artifactId>
            <version>1.6.2.RELEASE</version>
        </dependency> -->
        <!-- 常用有三种json解析jackson、fastjson、gson。 -->
        <!-- <dependency>  
            <groupId>com.alibaba</groupId>  
            <artifactId>fastjson</artifactId>  
            <version>1.1.41</version>  
        </dependency> -->
        <!-- 2.9.3 -->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.7.5</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core -->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>2.7.5</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-annotations -->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-annotations</artifactId>
            <version>2.7.5</version>
        </dependency>
        
        <dependency>
          <groupId>javax.servlet</groupId>
          <artifactId>servlet-api</artifactId>
          <version>2.5</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>4.3.0.RELEASE</version>
        </dependency>

 

posted on 2020-04-28 14:42  学习写代码呀  阅读(316)  评论(0编辑  收藏  举报