当前位置: 代码迷 >> Web前端 >> Java与Flex学习札记(21)-Flex与Java通信方式之WebService
  详细解决方案

Java与Flex学习札记(21)-Flex与Java通信方式之WebService

热度:322   发布时间:2012-10-16 09:57:37.0
Java与Flex学习笔记(21)----Flex与Java通信方式之WebService

       今天终于把Flex与Java通信的第三种方式给整出来了。之前之所以没有弄是因为本人不知道怎么建立WebService服务。而网上找到的都是用的免费的天气预报服务。好吧,大家学习这种通信式只是为了做天气预报吧,只是我可不敢苟同。好在今天终于弄出来了。


      前面我们知道Flex与Java有3种通信方式:


      1.      Flex通过RemoteObject方式与普通Java类通信。


       2.      Flex通过HttpService方式与服务器类通信,如servlet。


       3.      Flex通过WebService与Java通信.


       WebService的知识我就不说了,但是Flex通过WebService与Java通信方式却是很简单的。


      下面先建立一个WebService地址。


        在Eclipse里新建一个web工程webserviceDemo,在里面新建一个类LoginService.java,代码如下所示:


package com.ldfsoft.service;
 
public classLoginService {
    public boolean login(Stringusername,String passworld){
       boolean result=false;
       if("admin".equals(username)&&"123".equals(passworld)){
           result=true;
       }
       return result;
    }
}


 

        这个类里有个方法login(),很简单。


        接着对着这个类右键,选择WebServiceà  --->  Creata Web Service,如下图所示:




         选择默认的配置点击“Finish”即可,eclipse会自动帮我们建立WebService地址。


        下面我们测试我们刚才建立的WebService服务。在地址栏输入http://localhost:8000/webserviceDemo/services/LoginService?wsdl,如果页面如下所示,则说明配置成功:




       接着在Flex中用WebService通信。


       新建一个flex页面webserviceDemo.mxml,代码如下所示:


<?xml version="1.0"encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
              xmlns:s="library://ns.adobe.com/flex/spark"
              xmlns:mx="library://ns.adobe.com/flex/mx"minWidth="955"minHeight="600"pageTitle="WebService测试">
    <fx:Style>
       @namespace s "library://ns.adobe.com/flex/spark";
       @namespace mx "library://ns.adobe.com/flex/mx";
        .txt{
           fontSize:18;
       }
    </fx:Style>
   
    <fx:Script>
       <![CDATA[
           import mx.controls.Alert;
           importmx.rpc.events.FaultEvent;
           importmx.rpc.events.ResultEvent;
           protected function operation1_resultHandler(event:ResultEvent):void
           {
              // TODO Auto-generated method stub
              varresult:Boolean=event.result as Boolean;
              if(result){
              Alert.show("登陆成功~","提示");
              }else{
                  Alert.show("登陆失败~","提示");
              }
           }
           protected functionoperation1_faultHandler(event:FaultEvent):void
           {
              // TODO Auto-generated method stub
              Alert.show(event.fault.message,"提示");
           }
          
           protected functionlogin_clickHandler(event:MouseEvent):void
           {
              // TODO Auto-generated method stub
              //发送请求
              webSer.login.send();
           }
          
       ]]>
    </fx:Script>
    <fx:Declarations>
       <!--注意WebService中的参数个数与顺序要与发布地址中的参数一样-->
       <s:WebService id="webSer" wsdl="http://localhost:8000/webserviceDemo/services/LoginService?wsdl">
           <s:operation name="login" result="operation1_resultHandler(event)"fault="operation1_faultHandler(event)">
              <s:request>
                  <username>{username.text}</username>
                  <passworld>{password.text}</passworld>
              </s:request>
           </s:operation>
       </s:WebService>
    </fx:Declarations>
    <s:Label x="351" y="158" text="账户:" fontSize="18"  styleName="txt"/>
    <s:TextInput x="439" y="154" id="username" styleName="txt"/>
    <s:Label x="351" y="201" text="密码:" fontSize="18" id="password_txt" styleName="txt"/>
    <s:TextInput x="441" y="196" id="password" styleName="txt"displayAsPassword="true"/>
    <s:Button x="461" y="273" height="34" label="登陆" fontSize="18"  id="login" styleName="txt"click="login_clickHandler(event)"/>
   
</s:Application>


          接着运行这个页面,如果输入的是用户名为“admin”与密码为“123”登陆成功反之则失败的话,则表明通讯成功。




       注意,如果你了解WebService的话你就会明白他们是通过将数据组装成xml传送数据的。本例子中建立WebService服务在webserviceDemo工程中,而Flex页面则是在另一个工程中,由此可以知道:WebService可以是不同工程间通信的桥梁!


       这是本人学习的结果,允许转载,欢迎交流,但转载务必给出本文章的链接地址:http://blog.csdn.net/youqishini/article/details/8070635,谢谢~




1楼les5332295昨天 22:07
俺喜欢这种方式n Flex通过RemoteObject方式与普通Java类通信nn这却是最难处理的一种。
  相关解决方案