最近在做一個項目開發框架.前臺使用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);
- }
|