Flex與Java Servlet交互實(shí)例淺析
這是一個(gè)用Flex與后臺(tái)的 Servlet進(jìn)行交互的例子,希望對(duì)一些剛學(xué)習(xí)Flex的新手有所幫助。為了搞清楚Flex是如何與后臺(tái)進(jìn)行通訊,本人在剛開(kāi)始學(xué)Flex前五天可以說(shuō)是碌碌無(wú)為,這個(gè)文章的目的就是為了使初學(xué)者少走彎路。
交互原理:三個(gè)字母---------XML,客戶(hù)端接受從服務(wù)器端發(fā)送過(guò)來(lái)的XML數(shù)據(jù)。
本例工作流程:客戶(hù)端很簡(jiǎn)單就一個(gè)DataGrid組件,用來(lái)顯示服務(wù)器端傳送過(guò)來(lái)的數(shù)據(jù)。對(duì)應(yīng)的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="用戶(hù)信息" width="776" height="281" fontSize="18"﹥
- ﹤mx:DataGrid dataProvider="{model.user}" width="748" height="231"﹥
- ﹤mx:columns﹥
- ﹤mx:DataGridColumn dataField="name" headerText="用戶(hù)"﹥
- ﹤/mx:DataGridColumn﹥
- ﹤mx:DataGridColumn dataField="pwd" headerText="密碼"﹥
- ﹤/mx:DataGridColumn﹥
- ﹤mx:DataGridColumn dataField="school" headerText="現(xiàn)在學(xué)校"﹥
- ﹤/mx:DataGridColumn﹥
- ﹤/mx:columns﹥
- ﹤/mx:DataGrid﹥
- ﹤/mx:Panel﹥
- ﹤/mx:Application﹥
在此需要注意﹤mx:Model﹥標(biāo)簽,source屬性指定的是一個(gè)servlet映射,這個(gè)servlet的作用是利用response向客戶(hù)端寫(xiě)入XML。
讀取數(shù)據(jù)庫(kù)數(shù)據(jù),生成XML文件由兩個(gè)類(lèi)組成,一個(gè)為FirstServlet.java,一個(gè)為XML.java,其中前者就是一個(gè)普通的servlet,用來(lái)寫(xiě)XML文件,后者專(zhuān)門(mén)用來(lái)生成XML文件,由Java XML API操作完成。廢話(huà)少說(shuō),先看看代碼
FirstServlet代碼摘要:
Java 代碼
- try {
- xml.init() ;
- Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver") ;
- //*********建立數(shù)據(jù)庫(kù) 名為flex*************//
- String url = "jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=flex" ;
- //**********換上你自己的用戶(hù)名和密碼信息************//
- con = DriverManager.getConnection(url, "sa", "135780") ;
- stmt = con.createStatement() ;
- //**********里面建表名為USERS 具體SQL語(yǔ)句見(jiàn)附件下載**********//
- result = stmt.executeQuery("select * from USERS") ;
- } catch(Exception e) {
- e.printStackTrace() ;
- }
- //重要:設(shè)置響應(yīng)格式為XML格式
- response.setContentType("text/xml") ;
- response.setCharacterEncoding("UTF-8") ;
- PrintWriter out = response.getWriter() ;
以上為servlet連接數(shù)據(jù)庫(kù)并設(shè)置響應(yīng)格式的代碼,下面是寫(xiě)XML文件的關(guān)鍵代碼:
Java 代碼
- while(result.next()) {
- String[] strs = new String[3] ;
- strs[0] = result.getString("name") ;
- strs[1] = result.getString("pwd") ;
- strs[2] = result.getString("school") ;
- //*****創(chuàng)建XMLdocument*******//
- xml.create(strs) ;
- }
- result.close() ;
- stmt.close() ;
- con.close() ;
- //*******寫(xiě)XML文件到客戶(hù)端********//
- xml.output(out) ;
其中末行的xml是XML.java的一個(gè)實(shí)例,XML的一些重要方法如下:
Java 代碼
- /**
- * 把XML文檔寫(xiě)入到輸出流
- *
- * @param out
- * ----指定的輸出流
- * @throws Exception
- *
- * 編寫(xiě)者:王景輝 湖南農(nóng)業(yè)大學(xué)&湖南愛(ài)瑞潔投資管理公司
- */
- 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 代碼
- /**
- * 創(chuàng)建XML文檔
- *
- * @param strs
- * -------傳送過(guò)來(lái)的姓名和密碼和學(xué)校參數(shù)
- *
- * 編寫(xiě)者:王景輝 湖南農(nóng)業(yè)大學(xué)&湖南愛(ài)瑞潔投資管理公司
- */
- public void create(String[] strs) {
- //*********級(jí)子節(jié)點(diǎn)******//
- Element first = document.createElement("user") ;
- root.appendChild(first) ;
- for(int i=0; i﹤strs.length; i++) {
- if(i==0) {
- //*******第二級(jí)子節(jié)點(diǎn)******//
- 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) ;
- }
- }
- }
其實(shí)說(shuō)到底,這個(gè)例子沒(méi)有什么神秘的,只要記住,XML是Flex與后臺(tái)進(jìn)行數(shù)據(jù)交換的媒介,無(wú)論后臺(tái)數(shù)據(jù)怎么千變?nèi)f化,出口就有這一個(gè)。如果試驗(yàn),可以先從簡(jiǎn)單開(kāi)始,不涉及查詢(xún)數(shù)據(jù)庫(kù),直接在servlet寫(xiě)出XML。
如果大家還有什么疑問(wèn),歡迎留言,我也是初學(xué)者,讓我們共同進(jìn)步。。。
程序運(yùn)行方法:
STEP1: 在SQLServer2000里建一個(gè)數(shù)據(jù)庫(kù)flex,然后在查詢(xún)分析器導(dǎo)入附件所帶的SQL語(yǔ)句.sql,生成所需表格
STEP2: 把FlexDataService安裝目錄下的flex.war解壓到(比如說(shuō)D:\a),然后把D:\a\web-inf下的flex整個(gè)目錄拷貝到 WEB程序的WEB-INF下,把D:\a\web-inf\lib目錄下的jar包拷貝到對(duì)應(yīng)WEB程序下的lib目錄下。
STEP4: 拷貝工程文件到你所建的MyEclipse工程
因?yàn)镕lex與Java進(jìn)行通信涉及到的文件會(huì)非常多,如果你以前會(huì)部署,那再好不過(guò)。一般情況下,根據(jù)上述步驟能部署成功。
Flex與Java Servlet交互實(shí)例淺析就到這里告一段落了,不知道你的感覺(jué)如何?
【編輯推薦】