Flex与Java Servlet交互实例

2010-07-26 19:53

Flex与Java Servlet交互实例

by

at 2010-07-26 11:53:27

original http://www.javaeye.com/topic/721272

自从参加了flex培训,不知不觉,学习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 out = 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。
详细的代码和运行在http://www.flexedu.com/zixun_show.php?id=132&xid=3可以查看。

      <br><br>
      作者: <a href="http://fengyuikaka.javaeye.com">fengyuikaka</a> 
      <br>
      声明: 本文系JavaEye网站发布的原创文章,未经作者书面许可,严禁任何网站转载本文,否则必将追究法律责任!
      <br><br>
      <span style="color:red">
        <a href="http://www.javaeye.com/topic/721272" style="color:red">已有 <strong>2</strong> 人发表回复,猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
      </span>
      <br><br><br>

JavaEye推荐