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> 人发表回复,猛击->><strong>这里</strong><<-参与讨论</a>
</span>
<br><br><br>
JavaEye推荐