Flex Spring整合

內容如下

 

  • 關於Adobe Flex
  • 關於Spring
  • 爲什麼使用Flex和Spring
  • Flex和Spring的整合

關於Flex

Adobe Flex是一套創建富客戶端應用(RIAs)的框架.Flex生成的swf文件可以直接運行在Flash Player之中。相比較基於時間軸的Flash開發,Flex框架更適合那些用傳統方式開發應用程序的開發人員。Flex應用可以使用Flex builder來開發。這套IDE是基於Eclipse平臺開發的。Action Script3語言是用來訪問數據和創建用戶接口組件的。Flex框架也用到了一種XML語言叫做MXML,它是用來簡化Flex開發和佈局的。

 

關於Spring

Spring是目前最受歡迎的創建企業級應用的Java框架。不像傳統的J2EE開發,Spring提供了輕量級的容器。使用Spring會使應用 的測試和開發更爲簡單。雖然Spring依賴注入的功能最出名,但是它也提供了其他服務端企業程序所需要的功能。如安全和事務處理。

 

爲什麼使用Flex和Spring

Flex技術本身和Java就有很強的關聯性,它提供了一個基於Eclipse的IDE和BlazeDS.BlazeDS是個基於服務端的Java 遠程調用和Web消息的一個開源的技術。有許多應用都是以Java爲後端處理的。Flex用於前端。由於Java和Flex一起頻繁的使用。人們很容易就 想到Flex和Spring的整合。有許多企業和組織已經着手開始使用Flex作爲用戶接口了。在2008年末,Spring社區已經着手Spring BlazeDS整合的項目。爲Java和Spring添加更好的Flex支持。

 

默認的情況下BlazeDS創建了一個服務端Java對象的實例,用它們來完成遠程對象的請求。但是這種方法並不適用於Spring.因爲整個框架 使用的服務的對象都是用Spring容器所創建的。Spring和BlazeDS的整合,Flex就可以使用Spring中的對象了。

 

整合Flex和Spring

爲了使用BlazeDS,服務端的Java應用應打包爲WAR文件。這部分的代碼實例是使用Eclipse來創建和編輯的。步驟如下

 

  • 設置服務端的BlazeDS Java工程以及Spring框架。
  • 在BlazeDS中配置Spring的bean
  • 寫一個Flex應用去使用Spring/BlazeDS的服務。

所需要的開發環境如下
首先設置服務端的JAVA工程,用blazeds.war(在blazeds的壓縮包中)創建一個WEB工程。步驟如下
  • Choose File>import
  • 選擇WAR選項。指定blazedsWAR文件的位置。輸入工程名test-server
  • 點擊完成
現在就可以創建一個服務器來運行這個WEB應用。
  • File>New>Other
  • 選擇Server>Server
  • 點擊Next
  • 選擇Apache>Tomcat6 Server
  • 點擊Next
  • 指定Tomcat的安裝位置以及JRE(5以上版本)
  • 點擊Next
  • 在Availble Projects list中選擇test-server
  • 點擊Add添加到Configured Project list
  • 點擊Finish
接下來就可以創建Java類了。這個類在Java和Flex之間傳輸
Java代碼
public class MyEntity {
 private String frstName;
 private String lastName;
 private String emailAddress;
 
 public String getFirstName() {
  return frstName;
 }
 public void setFirstName(String frstName) {
  this.frstName = frstName;
 }
 public String getLastName() {
  return lastName;
 }
 public void setLastName(String lastName) {
  this.lastName = lastName;
 }
 public String getEmailAddress() {
  return emailAddress;
 }
 public void setEmailAddress(String emailAddress) {
  this.emailAddress = emailAddress;
 }
}
Java服務接口
Java代碼

Java服務的實現
import java.util.List;
public interface MyService {
 public List<MyEntity> getMyEntities();
}


這三個類對於例子足夠了。在實戰中,這個服務類可能要連接到數據庫。爲了方便我們學習,這個例子中就返回的是個list的硬編碼了。

基本的java工程算是完工了。。

接下來我們要做Spring的配置了。
  • 把Spring的庫以及Spring BlazeDS整合的庫,還有ANTLR庫文件放到項目/WEB-INF/lib下。
  • 創建一個Spring配置文件。鼠標右鍵點擊WebContent/WEB-INF以及選擇New>File,文件名輸入 application-config.xml.點擊完成。配置文件內容如下。
Xml代碼
  1. <? xml   version = "1.0"   encoding = "UTF-8" ?>     
  2. < beans   xmlns = "http://www.springframework.org/schema/beans"     
  3.  xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"     
  4.  xsi:schemaLocation ="    
  5.  http://www.springframework.org/schema/beans    
  6.  http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">     
  7.  <!-- Spring Beans’s -->     
  8.  < bean   id = "myService"   class = "MyServiceImpl"   />     
  9. </ beans >     
 
懂Spring的人看這配置最熟悉不過了。。

通過這一步,已經有了一個BlazeDS默認配置的Java web工程。下面我們就更改BlazeDS默認配置,去使用新創建的Spring中的bean.

爲了配置Spring BlazeDS的整合,更新web.xml。
Xml代碼
  1. <? xml   version = "1.0"   encoding = "UTF-8" ?>   
  2. < web-app   xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"   
  3.     xmlns = "http://java.sun.com/xml/ns/javaee"   xmlns:web = "http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"   
  4.     xsi:schemaLocation = "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"   
  5.     id = "WebApp_ID"   version = "2.5" >   
  6.     < display-name > test-server </ display-name >   
  7.     < servlet >   
  8.         < servlet-name > Spring MVC Dispatcher Servlet </ servlet-name >   
  9.         < servlet-class > org.springframework.web.servlet.DispatcherServlet </ servlet-class >   
  10.         < init-param >   
  11.             < param-name > contextConfigLocation </ param-name >   
  12.             < param-value > /WEB-INF/application-config.xml </ param-value >   
  13.         </ init-param >   
  14.         < load-on-startup > 1 </ load-on-startup >   
  15.     </ servlet >   
  16.     <!-- Map /spring/* requests to the DispatcherServlet -->   
  17.     < servlet-mapping >   
  18.         < servlet-name > Spring MVC Dispatcher Servlet </ servlet-name >   
  19.         < url-pattern > /spring/* </ url-pattern >   
  20.     </ servlet-mapping >   
  21. </ web-app >   
 
創建的Servlet可以處理這個請求,http://localhost:8080/test-server/spring
這是訪問BlazeDS的基本的URL。當然這也是Spring標準的DispatcherServlet.

現在已經把Spring整合到Java web工程中了。要整合BlazeDS,就要修改下Spring的配置文件。
application-config.xml文件如下
Xml代碼
  1. <? xml   version = "1.0"   encoding = "UTF-8" ?>   
  2. < beans   xmlns = "http://www.springframework.org/schema/beans"   
  3.  xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"   
  4.  xmlns:flex = "http://www.springframework.org/schema/flex"   
  5.  xsi:schemaLocation ="  
  6.  http://www.springframework.org/schema/beans  
  7.  http://www.springframework.org/schema/beans/spring-beans-2.5.xsd  
  8.  http://www.springframework.org/schema/flex  
  9.  http://www.springframework.org/schema/flex/spring-flex-1.0.xsd">     
  10.  <!-- Spring Beans’s -->   
  11.  < bean   id = "myService"   class = "MyServiceImpl"   />   
  12.  <!-- Simplest possible message broker -->    
  13.  < flex:message-broker />   
  14.   <!-- exposes myService as BlazeDS destination -->   
  15.  < flex:remoting-destination   ref = "myService"   />   
  16. </ beans >   
 
通過配置,使BlazeDS接口開放。首先要添加Flex的namespace。添加之後,使用message-broker標籤創建 MessageBrokerFactoryBean。看下配置只是個簡單標籤。配置是默認的。要確保WEB-INF/flex 下有service-config.xml這個配置文件。remoting-

destination標籤使Spring bean變爲遠程目標。


接下來修改默認的BlazeDS service-config.xml文件。代碼如下
Xml代碼
  1. <? xml   version = "1.0"   encoding = "UTF-8" ?>   
  2. < services-config >   
  3.     < services >   
  4.         < default-channels >   
  5.             < channel   ref = "my-amf"   />   
  6.         </ default-channels >   
  7.     </ services >   
  8.     < channels >   
  9.         < channel-definition   id = "my-amf"   
  10.             class = "mx.messaging.channels.AMFChannel" >   
  11.             < endpoint   
  12.                 url = "http://{server.name}:{server.port}/{context.root}/spring/messagebroker/amf"   
  13.                 class = "flex.messaging.endpoints.AMFEndpoint"   />   
  14.         </ channel-definition >   
  15.         < channel-definition   id = "my-polling-amf"   
  16.             class = "mx.messaging.channels.AMFChannel" >   
  17.             < endpoint   
  18.                 url = "http://{server.name}:{server.port}/{context.root}/spring/messagebroker/amfpolling"   
  19.                 class = "flex.messaging.endpoints.AMFEndpoint"   />   
  20.             < properties >   
  21.                 < polling-enabled > true </ polling-enabled >   
  22.                 < polling-interval-seconds > 4 </ polling-interval-seconds >   
  23.             </ properties >   
  24.         </ channel-definition >   
  25.     </ channels >   
  26. </ services-config >   
 
看一下 endpoint標籤的的url.唯一可以修改的就是content.root之後的spring.所有遠程目標配置都應該配置在 application-config.xml文件中。

現在我們完成了Spring/BlazeDS Java應用。可以啓動Tomcat來查看配置是否出錯。

接下來我們就可以新建一個Flex來遠程調用Spring服務。步驟如下
  • File>New>Other
  • 選擇Flex Project
  • 填寫工程名稱test-flex
  • 用默認的地址
  • 選擇Web application(運行在Flash player)
  • Application Type 選擇None
  • 點擊Next
  • 指定Output的文件夾。如   C:/workspace/test-server/WebContent/
  • 點擊Finish
工程創建完畢,我們會看到一個main.mxml的文件。修改代碼如下
Xml代碼
  1. <? xml   version = "1.0"   encoding = "utf-8" ?>   
  2. < mx:Application   xmlns:mx = "http://www.adobe.com/2006/mxml"    
  3.     layout = "absolute"    
  4.     creationComplete = "srv.getMyEntities()" >   
  5.     < mx:AMFChannel   id = "myamf"   uri = "/test-server/spring/messagebroker/amf" />     
  6.  < mx:ChannelSet   id = "channelSet"   channels = "{[myamf]}" />     
  7.  < mx:RemoteObject   id = "srv"    
  8.    destination = "myService"   channelSet = "{channelSet}" />     
  9.  < mx:DataGrid   dataProvider = "{srv.getMyEntities.lastResult}" />   
  10. </ mx:Application >   
 
以上代碼的AMFChannel訪問了Spring的服務。
要注意的是RemoteObject標籤中的destination的destination要和spring的application-config.xml中remote-service標籤的ref所設置的值保持一致。通過代碼可以看出Flex並沒有包

含關於Spring的東西。編寫Flex的

開發人員不必知道關於Spring的知識。

要更新test-server的程序。可以Refresh這個工程。

下面測試一下。啓動Tomcat.http://localhost:8080/test-server/main.html



 

爲了在Flex builder中調試運行。可以做如下設置

 

  • 右鍵點擊test-flex工程。
  • 選擇Properties,之後是Flex build path
  • Output Folder URL 填寫  http://localhost:8080/test-server/
  • 點擊OK
之後直接運行就可以了。整合完成。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章