Flex與Java Servlet交互實例淺析
這是一個用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) ;
- }
- }
- }
其實說到底,這個例子沒有什么神秘的,只要記住,XML是Flex與后臺進行數據交換的媒介,無論后臺數據怎么千變萬化,出口就有這一個。如果試驗,可以先從簡單開始,不涉及查詢數據庫,直接在servlet寫出XML。
如果大家還有什么疑問,歡迎留言,我也是初學者,讓我們共同進步。。。
程序運行方法:
STEP1: 在SQLServer2000里建一個數據庫flex,然后在查詢分析器導入附件所帶的SQL語句.sql,生成所需表格
STEP2: 把FlexDataService安裝目錄下的flex.war解壓到(比如說D:\a),然后把D:\a\web-inf下的flex整個目錄拷貝到 WEB程序的WEB-INF下,把D:\a\web-inf\lib目錄下的jar包拷貝到對應WEB程序下的lib目錄下。
STEP4: 拷貝工程文件到你所建的MyEclipse工程
因為Flex與Java進行通信涉及到的文件會非常多,如果你以前會部署,那再好不過。一般情況下,根據上述步驟能部署成功。
Flex與Java Servlet交互實例淺析就到這里告一段落了,不知道你的感覺如何?
【編輯推薦】