最近在做一个项目开发框架.前台使用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);来进行访问了.
java 代码
- public class HelloWorldImpl implements IHelloWorld {
- public String sayHello(String str) {
- return str + " , 欢迎使用Spring远程服务访问..."
- }
- }
java 代码
- public interface IHelloWorld {
- public String sayHello(String str);
- }
|