自从呼叫中心项目开始,不知不觉,学习Flex已经十天有余了!现在已经基本进入状态,今天本人在此班门弄斧,发一个利用Flex与后台的Servlet进行通讯的例子,希望对一些刚学习Flex的新手有所帮助。为了搞清楚Flex是如何与后台进行通讯,本人在刚开始学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. </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. </mx:DataGridColumn>
12. <mx:DataGridColumn dataField="pwd" headerText="密码">
13.                            
14. </mx:DataGridColumn>
15. <mx:DataGridColumn dataField="school" headerText="现在学校">
16.                            
17. </mx:DataGridColumn>
18. </mx:columns>
19. </mx:DataGrid>
20. </mx:Panel>
21. </mx:Application>


在此需要注意<mx:Model>标签,source属性指定的是一个servlet映射,这个servlet的作用是利用response向客户端写入XML。

读取数据库数据,生成XML文件由两个类组成,一个为FirstServlet.java,一个为XML.java,其中前者就是一个普通的servlet,用来写XML文件,后者专门用来生成XML文件,由Java XML API操作完成。废话少说,先看看代码

FirstServlet代码摘要:

java 代码


1. try
2.              xml.init() ;       
3. "com.microsoft.jdbc.sqlserver.SQLServerDriver") ;       
4. //*********建立数据库 名为flex*************//    
5. "jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=flex"
6. //**********换上你自己的用户名和密码信息************//    
7. "sa", "135780") ;       
8.              stmt = con.createStatement() ;       
9. //**********里面建表名为USERS   具体SQL语句见附件下载**********//    
10. "select * from USERS") ;       
11. catch(Exception e) {       
12.              e.printStackTrace() ;       
13.          }       
14. //重要:设置响应格式为XML格式    
15. "text/xml") ;       
16. "UTF-8") ;       
17.          PrintWriter out = response.getWriter() ;

以上为servlet连接数据库并设置响应格式的代码,下面是写XML文件的关键代码:

java 代码

1. while(result.next()) {       
2. new String[3] ;       
3. 0] = result.getString("name") ;       
4. 1] = result.getString("pwd") ;       
5. 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
11.          Transformer trans = TransformerFactory.newInstance().newTransformer() ;       
12. "UTF-8") ;       
13. new
14. new
15.          trans.transform(source, result) ;       
16.          writer.flush() ;       
17.          writer.close() ;       
18.      }

java 代码

1. 
2. /**   
3. 
4.       * 创建XML文档   
5.       *    
6.       * @param    strs    
7.       *        -------传送过来的姓名和密码和学校参数   
8.       *    
9.       * 编写者:王景辉 湖南农业大学&湖南爱瑞洁投资管理公司   
10.       */
11. public void
12. //******第一级子节点******//    
13. "user") ;       
14.          root.appendChild(first) ;       
15.                
16. for(int i=0; i<strs.length; i++) {       
17. if(i==0) {       
18. //*******第二级子节点******//    
19. "name") ;       
20.                  name.appendChild(document.createTextNode(strs[i])) ;       
21.                  first.appendChild(name) ;       
22. if(i==1) {       
23. "pwd") ;       
24.                  pwd.appendChild(document.createTextNode(strs[i])) ;       
25.                  first.appendChild(pwd) ;       
26. if(i==2) {       
27. "school") ;       
28.                  school.appendChild(document.createTextNode(strs[i])) ;       
29.                  first.appendChild(school) ;       
30.              }       
31.          }       
32.      }