参考文章:
例子:远程服务器上提供了计算两个数的和的接口,利用spring的httpinvoker技术在客户端实现远程调用,将计算功能交给服务器来执行,然后服务器将结果返回给客户端。
服务器端结构:
客户端机构:
其中GetSumService.jar是服务器端提供给客户端使用的接口,用来计算两个数的和。就是服务器端com.yuan.service打出的jar包。
服务器端代码分析:
计算接口(TestService.java):
1 package com.yuan.service;2 3 /**4 * @author Caihanyuan5 * @time 2012-10-26 上午10:56:466 */7 public interface TestService {8 public double getSum(double numberA, double numberB);9 }
1 package com.sunflower.serviceimp; 2 3 import com.yuan.service.TestService; 4 5 /** 6 * @author Caihanyuan 7 * @time 2012-10-26 上午10:57:23 8 */ 9 public class TestServiceImp implements TestService {10 11 @Override12 public double getSum(double numberA, double numberB) {13 return numberA + numberB;14 }15 16 }
在spring配置文件中声明服务的出口(application-context.xml):
在org.springframework.remoting.httpinvoker.HttpInvokerServiceExporter配置服务的接口和接口的实现。配置服务器的属性(web.xml):
1 26 7 8 11 12contextConfigLocation 9/WEB-INF/application-context.xml 1013 17 18 1914 org.springframework.web.context.ContextLoaderListener15 1620 24 25 26service 21org.springframework.web.servlet.DispatcherServlet 221 2327 30 31 32 33service 28/service/* 2934 36index.jsp 35
第7~10行配置上下文路径,就是服务出口配置文件的路径。12~16行配置转载上下文的监听器。19~29行配置Http请求中服务对应的路径。配置路径映射(service-servlet.xml):
1 2 45 7 138 129 11httpService 10
这个配置文件的名字是有规范的,后缀为-servlet.xml,前缀是上面web.xml中配置的servlet名字。
客户端代码分析:
配置远程调用代理(application-context.xml):
1 2 45 7 148 10http://localhost:80/service/service/httpService 911 13com.yuan.service.TestService 12
测试(Test.java):
1 package com.yuan.test; 2 3 import org.springframework.context.ApplicationContext; 4 import org.springframework.context.support.ClassPathXmlApplicationContext; 5 6 import com.yuan.service.TestService; 7 8 /** 9 * @author Caihanyuan10 * @time 2012-10-26 上午11:14:0911 */12 public class Test {13 private static ApplicationContext appContext = new ClassPathXmlApplicationContext(14 "application-context.xml");15 16 public static TestService getTestService() {17 return (TestService) appContext.getBean("httpService");18 }19 20 public static void main(String[] args) {21 double numberA = 12.5;22 double numberB = 52.3;23 24 System.out.println("sum of numberA and numberB is:"25 + getTestService().getSum(numberA, numberB));26 27 }28 }
测试结果:
源码下载: