不知不覺,學習Flex已經二十天有餘了!現在已經基本進入狀態,今天本人在此班門弄斧,自己寫一個用Flex與後台的Servlet進行通訊的例子,希望對一些剛學習Flex的新手有所幫助,目的就是為了讓後面的兄弟少走彎路.
交互原理:三個字母---------XML,客戶端接受從伺服器端發送過來的XML數據.
本例工作流程:客戶端很簡單就一個DataGrid組件,用來顯示伺服器端傳送過來的數據.對應的mxml文件如下:
xml 代碼
1. <?xml version="1.0" encoding="UTF-8"?>
2. <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
3. <mx:Model source="http://localhost:8080/flex/first" id="model">
4.
5. </< SPAN>mx:Model>
6. <mx:Panel title="用戶信息" width="776" height="281" fontSize="18">
7. <mx:DataGrid dataProvider="{model.user}" width="748" height="231">
8. <mx:columns>
9. <mx:DataGridColumn dataField="name" headerText="用戶">
10.
11. </< SPAN>mx:DataGridColumn>
12. <mx:DataGridColumn dataField="pwd" headerText="密碼">
13.
14. </< SPAN>mx:DataGridColumn>
15. <mx:DataGridColumn dataField="school" headerText="現在學校">
16.
17. </< SPAN>mx:DataGridColumn>
18. </< SPAN>mx:columns>
19. </< SPAN>mx:DataGrid>
20. </< SPAN>mx:Panel>
21. </< SPAN>mx:Application>
在此需要注意標籤,source屬性指定的是一個servlet映射,這個servlet的作用是利用response向客戶端寫入XML.
讀取資料庫數據,生成XML文件由兩個類組成,一個為FirstServlet.java,一個為XML.java,其中前者就是一個普通的servlet,用來寫XML文件,後者專門用來生成XML文件,由Java XML API操作完成.廢話少說,先看看代碼
FirstServlet代碼摘要:
java 代碼
1. try {
2. xml.init() ;
3. Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver") ;
4. //*********建立資料庫 名為flex*************//
5. String url = "jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=flex" ;
6. //**********換上你自己的用戶名和密碼信息************//
7. con = DriverManager.getConnection(url, "sa", "135780") ;
8. stmt = con.createStatement() ;
9. //**********裡面建表名為USERS 具體SQL語句見附件下載**********//
10. result = stmt.executeQuery("select * from USERS") ;
11. } catch(Exception e) {
12. e.printStackTrace() ;
13. }
14. //重要:設置響應格式為XML格式
15. response.setContentType("text/xml") ;
16. response.setCharacterEncoding("UTF-8") ;
17. PrintWriter ut = response.getWriter() ;
以上為servlet連接資料庫並設置響應格式的代碼,下面是寫XML文件的關鍵代碼:
java 代碼
1. while(result.next()) {
2. String[] strs = new String[3] ;
3. strs[0] = result.getString("name") ;
4. strs[1] = result.getString("pwd") ;
5. strs[2] = result.getString("school") ;
6. //*****創建XMLdocument*******//
7. xml.create(strs) ;
8. }
9. result.close() ;
10. stmt.close() ;
11. con.close() ;
12. //*******寫XML文件到客戶端********//
13. xml.output(out) ;
其中末行的xml是XML.java的一個實例,XML的一些重要方法如下:
java 代碼
1. /**
2. * 把XML文檔寫入到輸出流
3. *
4. * @param out
5. * ----指定的輸出流
6. * @throws Exception
7. *
8. *
9. */
10. public void output(Writer writer) throws Exception{
11. Transformer trans = TransformerFactory.newInstance().newTransformer() ;
12. trans.setOutputProperty(OutputKeys.ENCODING, "UTF-8") ;
13. Source source = new DOMSource(document) ;
14. Result result = new StreamResult(writer) ;
15. trans.transform(source, result) ;
16. writer.flush() ;
17. writer.close() ;
18. }
java 代碼
1. /**
2. * 創建XML文檔
3. *
4. * @param strs
5. * -------傳送過來的姓名和密碼和學校參數
6. *
7. *
8. */
9. public void create(String[] strs) {
10. //******第一級子節點******//
11. Element first = document.createElement("user") ;
12. root.appendChild(first) ;
13.
14. for(int i=0; i<>
15. if(i==0) {
16. //*******第二級子節點******//
17. Element name = document.createElement("name") ;
18. name.appendChild(document.createTextNode(strs[i])) ;
19. first.appendChild(name) ;
20. } if(i==1) {
21. Element pwd = document.createElement("pwd") ;
22. pwd.appendChild(document.createTextNode(strs[i])) ;
23. first.appendChild(pwd) ;
24. } if(i==2) {
25. Element school = document.createElement("school") ;
26. school.appendChild(document.createTextNode(strs[i])) ;
27. first.appendChild(school) ;
28. }
29. }
30. }
其實說到底,這個例子沒有什麼神秘的,只要記住,XML是Flex與後台進行數據交換的媒介,無論後台數據怎麼千變萬化,出口就有這一個.如果試驗,可以先從簡單開始,不涉及查詢資料庫,直接在servlet寫出XML.
[火星人 ] Flex與Java Servlet交互實例已經有487次圍觀