免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2155 | 回复: 0
打印 上一主题 下一主题

Flex+Java WebService with XFire [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-01-13 13:04 |只看该作者 |倒序浏览

Flex+Java WebService with XFire


Java的查询与更新方法是通用的,在flex端传递sql语句。

工具:MyEclipse6.0+Tomcat6.0+Flex Builder3+sqlserver2000

首先建立一个java Web Service Project,然后建个Web Service服务文件DataService, XFire 默认会添加,再建个连接数据库类conn,java端基本搞定。

由于没有用lcds所以在flex端不能自动将map转换为object,所以使用了两个for each将保存在map中的数据取出来。

数据库Script(test.sql):
use master
if exists(select * from sysdatabases where name='test')
         drop database test
go

create database test
go

use test
go

create table users
(
         id int identity(1,1) primary key,
         username varchar(16) not null,
         password varchar(16) not null
)
go

create table score
(
         id int identity(1,1) primary key,
         username varchar(16),
         score int
)
go

insert into users values('zhaobo','123456')
insert into users values('benben','123456')
insert into users values('kelvin','123456')
insert into users values('michelle','123456')
go

insert into score values('benben',100)
insert into score values('kelvin',50)
go

select * from users
select * from score

Java文件结构:


conn.java:
package service;

import java.sql.*;

public class Conn {
   
    Connection conn=null;

    public Conn() {
       // TODO Auto-generated constructor stub
    }
   
    public Connection getConnection()
    {
       try {
           Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
           String url="jdbc:odbc:driver={SQL Server};database=test;server=.";
           conn=DriverManager.getConnection(url);
       } catch (ClassNotFoundException e) {
           // TODO Auto-generated catch block
           e.printStackTrace();
       } catch (SQLException e) {
           // TODO Auto-generated catch block
           e.printStackTrace();
       }
      
       return conn;
    }
}

IDataSerivice.java:
package service;

import java.util.Collection;
import java.util.Map;

public interface IDataSerivice {
   
    public Collection query(String sql);
    public String update(String sql);
   
}

DataSeriviceImpl.java:
package service;

import java.sql.*;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;

public class DataSeriviceImpl implements IDataSerivice {
    Connection con=null;
    Statement stmt=null;
    ResultSet rs=null;
   
    Conn conn;
   
    public DataSeriviceImpl()
    {
       conn=new Conn();
    }
   
    //查询方法
    public Collection query(String sql) {
       ArrayList arr=new ArrayList();
      
       try {
           con=conn.getConnection();
           stmt=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
           rs=stmt.executeQuery(sql);
           
           //获取总列数
           ResultSetMetaData rsmd=rs.getMetaData();
           int columns=rsmd.getColumnCount();
           
           //将列名保存到字符数组中
           String[] columnName=new String[columns];
           for(int i=0;i
           {
              columnName=rsmd.getColumnName(i+1);
           }
           
           //将数据保存到哈希表中,然后将HashMap添加到ArrayList中
           while(rs.next())
           {
              HashMap map=new HashMap();
              for(int j=0;j
              {
                  map.put(columnName[j], rs.getString(j+1));
                  //System.out.println(map.get(columnName[j]));
              }
              arr.add(map);
           }
           
           rs.close();
           stmt.close();
           con.close();
       } catch (SQLException e) {
           e.printStackTrace();
       }
      
       return arr;
    }
   
    //更新方法
    public String update(String sql)
    {
       String flag="NoUpdate";
      
       int i=0;
       try {
           con=conn.getConnection();
           stmt=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
           
           i=stmt.executeUpdate(sql);
           if(i>0)
              flag="Success";
           
           stmt.close();
           con.close();
       } catch (SQLException e) {
           flag="Error";
           e.printStackTrace();
       }
      
       return flag;
    }
}

service.xml
xml version="1.0" encoding="UTF-8"?>
beans xmlns="http://xfire.codehaus.org/config/1.0">

    service>
       name>DataServicename>
       serviceClass>service.IDataSeriviceserviceClass>
       implementationClass>
           service.DataSeriviceImpl
       implementationClass>
       style>wrappedstyle>
       use>literaluse>
       scope>applicationscope>
    service>
beans>

web.xml
xml version="1.0" encoding="UTF-8"?>
web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee   http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
  servlet>
    servlet-name>XFireServletservlet-name>
    servlet-class>org.codehaus.xfire.transport.http.XFireConfigurableServletservlet-class>
    load-on-startup>0load-on-startup>
  servlet>
  servlet-mapping>
    servlet-name>XFireServletservlet-name>
    url-pattern>/*url-pattern>
  servlet-mapping>
  welcome-file-list>
    welcome-file>index.jspwelcome-file>
  welcome-file-list>
web-app>

Flex文件
DataTest.xml:
xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">

   
      
           import mx.rpc.events.FaultEvent;
           import mx.collections.ArrayCollection;
           import mx.rpc.events.ResultEvent;
           
           private function getUser():void
           {
              ws.query.addEventListener(ResultEvent.RESULT,getUserHandler);
              ws.query("select * from users");
           }
           private function getUserHandler(event:ResultEvent):void
           {
              ws.query.removeEventListener(ResultEvent.RESULT,getUserHandler);
              dgUser.dataProvider=convert(event);
           }
           
           private function getScore():void
           {
              ws.query.addEventListener(ResultEvent.RESULT,getScoreHandler);
              ws.query("select * from score");
           }
           private function getScoreHandler(event:ResultEvent):void
           {
              ws.query.removeEventListener(ResultEvent.RESULT,getScoreHandler);
              dgScore.dataProvider=convert(event);
           }
           
           private function convert(event:ResultEvent):ArrayCollection
           {
              var ac:ArrayCollection=new ArrayCollection();
              
              for each(var item:Object in event.result)
              {
                  var user:Object=new Object();
                  for each(var obj:Object in item)
                  {
                     user[obj["key"]]=obj["value"];
                     //trace(obj["key"]+":"+user[obj["key"]]);
                  }
                  ac.addItem(user);
              }
              return ac;
           }
           
           private function update():void
           {
              ws.update("update score set score=60 where username='kelvin'");
           }
           private function updateResult(event:ResultEvent):void
           {
              lblMsg.text=event.result.toString();
           }
           
           private function wsFault(event:FaultEvent):void
           {
              trace(event.message);
           }
       ]]>
   
   
     id="ws" wsdl="http://localhost:8080/DataService/DataService?WSDL" showBusyCursor="true" fault="wsFault(event)">
        name="query"/>
        name="update" result="updateResult(event)"/>
   
   
     x="10" y="10" label="query users" click="getUser()"/>
     x="329" y="10" label="query score" click="getScore()"/>
   
     id="dgUser" x="10" y="40" width="298" height="215">
      
            headerText="id" dataField="id"/>
            headerText="username" dataField="username"/>
            headerText="password" dataField="password"/>
      
   
   
     id="dgScore" x="329" y="43" width="269" height="212">
      
            headerText="id" dataField="id"/>
            headerText="username" dataField="username"/>
            headerText="score" dataField="score"/>
      
   
   
     id="btnUpdate" label="update" click="update()" x="10" y="263"/>
     id="lblMsg" x="10" y="293" text=""/>
   



本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/47207/showart_1795167.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP