通过Spring进行远程服务访问

来源:互联网 发布:淘宝发货清单表格 编辑:程序博客网 时间:2024/05/12 19:43

最近在做一个项目开发框架.前台使用Applet,服务器端最先考虑使用EJB3进行开发,但由于EJB采用的是RMI-IIOP协议进行底层数据传输,难于跨越防火墙,故考虑使用Spring提供的远程服务访问技术进行服务器端的编程.测试成功,记录下来..

环境:Eclipse3.2.2 JDK1.5 Spring2.0.2

1、由于客户端采用Applet,需要下载代码到客户端,简单起见,将所有的class都打包在一个jar包中,供客户端下载.以后考虑对下载的类进行缓存,以提高应用效率.
2、在IE中对applet进行配置,通过classid可以检测客户端的jre环境,如果不是需要的jdk版本,这里为1.5,则通过/Client下的客户端程序进行下载.由于应用定位于局域网中,下载一个20多M的程序应该不成问题..
3、applet访问本地资源的策略略过,有兴趣的可以留言....

下面主要介绍一下如果在Spring2.0.2中进行远程服务访问
1、定义客户端接口,此接口是暴露给客户端的....

接口中只有一个方法sayHello,作用是;根据客户端传入的str,传到服务器端连接一个字符串,再传到客户端.

2、定义一个类,实现IHelloWorld接口.

3、接下来就是通过xml文件进行组件的配置..
Spring的远程服务访问是通过 org.springframework.remoting.httpinvoker.HttpInvokerServiceExporter和 org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean 两个类来实现的.HttpInvokerServiceExporter负责将定义的服务进行导出,是目标服务暴露出来. HttpInvokerProxyFactoryBean 负责客户端代理.将http的post请求定位到指定的服务.默认情况下,Spring使用J2SE的http功能.可以通过注入将commons的 httpclient指定给HttpInvokerProxyFactoryBean..
步骤: 
1、web.xml文件:添加org.springframework.web.context.ContextLoaderListener监听.定义一个org.springframework.web.servlet.DispatcherServlet
命名为 httpinvoker..之后当服务器启动是会自动到WEB-INF下寻找httpinvoker-servlet.xml文件进行bean初始化.
之后定义一个servlet-mapping,使所有以/http/结尾的请求全部定位到httpinvoker Servlet上
2、applicationContext.xml 定义一个Bean  初始化HelloWorldImpl.
3、httpinvoker-servlet.xml 定义两个Bean BeanNameUrlHandlerMapping用于根据BeanName进行映射...HttpInvokerServiceExporter用于远程服务导出.
4、以上三步就已经完成了远程服务的复制工作.以下实现客户端的调用配置.clientContext.xml用于配置客户端的访问..即指定服务器的地址、端口等基础信息.
5、最后就可以在代码进行初始化clientContext.xml文件,通过ctx.getBean(helloWorldService);来进行访问了.

 
   1.  public class HelloWorldImpl implements IHelloWorld {   
   
2.     public String sayHello(String str) {   
   
3.         return str +  " ,  欢迎使用Spring远程服务访问..."  
   
4.     }
   
   
5. }
   

   public interface IHelloWorld {    
        
public  String sayHello(String str);   
   }
   
原创粉丝点击