自從話務中心項目開始,不知不覺,學習Flex已經十天有餘了!現在已經基本進入狀態,今天本人在此班門弄斧,發一個利用Flex與背景Servlet進行通訊的例子,希望對一些剛學習Flex的新手有所協助。為了搞清楚Flex是如何與後台進行通訊,本人在剛開始學Flex前五天可以說是碌碌無為,今天發這個文章的目的就是為了讓後面的兄弟少走彎路。
互動原理:三個字母---------XML,用戶端接受從伺服器端發送過來的XML資料。
本例工作流程:用戶端很簡單就一個DataGrid組件,用來顯示伺服器端傳送過來的資料。對應的mxml檔案如下:
xml 代碼
- <?xml version="1.0" encoding="UTF-8"?>
- <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
- <mx:Model source="http://localhost:8080/flex/first" id="model">
-
- </mx:Model>
- <mx:Panel title="使用者資訊" width="776" height="281" fontSize="18">
- <mx:DataGrid dataProvider="{model.user}" width="748" height="231">
- <mx:columns>
- <mx:DataGridColumn dataField="name" headerText="使用者">
-
- </mx:DataGridColumn>
- <mx:DataGridColumn dataField="pwd" headerText="密碼">
-
- </mx:DataGridColumn>
- <mx:DataGridColumn dataField="school" headerText="現在學校">
-
- </mx:DataGridColumn>
- </mx:columns>
- </mx:DataGrid>
- </mx:Panel>
- </mx:Application>
在此需要注意<mx:Model>標籤,source屬性指定的是一個servlet映射,這個servlet的作用是利用response向用戶端寫入XML。
讀取資料庫資料,產生XML檔案由兩個類組成,一個為FirstServlet.java,一個為XML.java,其中前者就是一個普通的servlet,用來寫XML檔案,後者專門用來產生XML檔案,由Java XML API操作完成。廢話少說,先看看代碼
FirstServlet代碼摘要:
java 代碼
- try {
- xml.init() ;
- Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver") ;
- //*********建立資料庫 名為flex*************//
- String url = "jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=flex" ;
- //**********換上你自己的使用者名稱和密碼資訊************//
- con = DriverManager.getConnection(url, "sa", "135780") ;
- stmt = con.createStatement() ;
- //**********裡面建表名為USERS 具體SQL語句見附件下載**********//
- result = stmt.executeQuery("select * from USERS") ;
- } catch(Exception e) {
- e.printStackTrace() ;
- }
- //重要:設定響應格式為XML格式
- response.setContentType("text/xml") ;
- response.setCharacterEncoding("UTF-8") ;
- PrintWriter out = response.getWriter() ;
以上為servlet串連資料庫並設定響應格式的代碼,下面是寫XML檔案的關鍵代碼:
java 代碼
- while(result.next()) {
- String[] strs = new String[3] ;
- strs[0] = result.getString("name") ;
- strs[1] = result.getString("pwd") ;
- strs[2] = result.getString("school") ;
- //*****建立XMLdocument*******//
- xml.create(strs) ;
- }
- result.close() ;
- stmt.close() ;
- con.close() ;
- //*******寫XML檔案到用戶端********//
- xml.output(out) ;
其中末行的xml是XML.java的一個執行個體,XML的一些重要方法如下:
java 代碼
- /**
- * 把XML文檔寫入到輸出資料流
- *
- * @param out
- * ----指定的輸出資料流
- * @throws Exception
- *
- * 編寫者:王景輝 湖南農業大學&湖南愛瑞潔投資管理公司
- */
- public void output(Writer writer) throws Exception{
- Transformer trans = TransformerFactory.newInstance().newTransformer() ;
- trans.setOutputProperty(OutputKeys.ENCODING, "UTF-8") ;
- Source source = new DOMSource(document) ;
- Result result = new StreamResult(writer) ;
- trans.transform(source, result) ;
- writer.flush() ;
- writer.close() ;
- }
java 代碼
- /**
- * 建立XML文檔
- *
- * @param strs
- * -------傳送過來的姓名和密碼和學校參數
- *
- * 編寫者:王景輝 湖南農業大學&湖南愛瑞潔投資管理公司
- */
- public void create(String[] strs) {
- //******第一級子節點******//
- Element first = document.createElement("user") ;
- root.appendChild(first) ;
-
- for(int i=0; i<strs.length; i++) {
- if(i==0) {
- //*******第二級子節點******//
- Element name = document.createElement("name") ;
- name.appendChild(document.createTextNode(strs[i])) ;
- first.appendChild(name) ;
- } if(i==1) {
- Element pwd = document.createElement("pwd") ;
- pwd.appendChild(document.createTextNode(strs[i])) ;
- first.appendChild(pwd) ;
- } if(i==2) {
- Element school = document.createElement("school") ;
- school.appendChild(document.createTextNode(strs[i])) ;
- first.appendChild(school) ;
- }
- }
- }