当前位置: 代码迷 >> Web前端 >> 施用Httpservice和Webservice来和Flex进行通讯
  详细解决方案

施用Httpservice和Webservice来和Flex进行通讯

热度:406   发布时间:2012-11-06 14:07:00.0
使用Httpservice和Webservice来和Flex进行通讯
  关于httpservice的配置,flex可以通过httpservice和webservice的方式进行数据的传递,现在来配置httpservice。

下面这句话就可以进行httpservice的配置

<mx:HTTPService id="indexService" url="jindex.jsp" resultFormat="xml" result="GetDetailsInfo()"  />

其中,id就是在这个mxml文件中使用的标示,我认为相当于对一个类的实例化,url就是通过httpservice调用的jsp文件的路径+文件名,一般同mxml放在同一个目录下面即可。ResultFormat是当调用了这个httpservice的时候返回的结果集,(注意:如果返回的结果集是进行数据绑定的话,一定要删除ResultFormat这个属性,否则不会显示绑定的内容,不过不需要绑定的话,一定要加上ResultFormat这个属性。否则也不能得到httpservice的结果,jsp文件返回的画面一定是xml的形式,应为flex只认xml格式的数据。)result就是调用httpservice后jsp形成xml文件,传递给flex,flex接受后的结果。通过httpservice返回的结果集以xml的方式存在,即可以用数组的形式取得。

var xmlNodes:Array = indexService.result.childNodes;这样数组xmlNodes存的就是xml的数据了!

②       现在配置webservice,flex通过webservice可以直接调用java文件中的方法,具体写法如下:

    <mx:WebService id="ws" serviceName="WaitForMomentWS">

        <mx:operation name="slowMethod" result="resultHandler(event)"/>

    </mx:WebService>

其中id还是这个webservice在这个mxml中的标示,serviceName会在一会讲解,slowMethod就是java文件中的具体的方法,result就是webservice返回的结果的方法

配置webservice需要配置F:\eclipse\workspace\FX-Blog\WebContent\WEB-INF\目录下面的server-config.wsdd和

F:\eclipse\workspace\FX-Blog\WebContent\WEB-INF\flex\下面的flex-config.xml这2个文件,首先配置server-config.wsdd,用ue打开后,增加如下代码:

<service name="WaitForMomentWS" provider="java:RPC">

  <parameter name="methodName" value="*"/>

  <parameter name="className" value="FXBlog.Others.WaitForMoment"/>

</service>

第一行的name就是上面的serviceName的名称,或者说这2个属性的名字要一直。

第三行的value的值就是这个java文件所在的package的名字加上自己的本身的名字

然后配置flex-config.xml,增加如下代码:



<service name="WaitForMomentWS">

    <wsdl>{context.root}/services/WaitForMomentWS?wsdl</wsdl>

    <endpoints>

       <endpoint>{context.root}/services/WaitForMomentWS</endpoint>

    </endpoints>

    <use-custom-authentication>true</use-custom-authentication>

</service>

其中所有行的路径名称必须同上2个代码中的名称一直,这样才能配置成功。按照上述的配置后,重新启动eclipse,就可以使用webservice了!


前几天发了个Flex利用HttpService和XML与后台的Servlet通信的例子,今天再给大家展示下本人近几天的学习成果----发布 一个WebService,并利用其做为Flex与Java通信的桥梁。最后,我会给出在做这个例子时遇到的一些困难和解决方案。希望对大家有些帮助!

The First Step:

利用Apache的AXIS引擎发布WebService。(本文假设您已经下载了AXIS)

1 利用MyEclipse新建一个Web工程,把AXIS_HOME/webapps/axis/web-inf下的web.xml和lib目录拷贝到你所建的工程的相应目录。

2 创建一个Web服务的提供类,这里展示下我创建的类。
java 代码

   1. /**
   2. * Web服务提供类
   3. *
   4. * 编写者:王景辉 湖南农业大学&湖南爱瑞洁投资管理公司
   5. */
   6. package com.wjh;
   7. import java.util.HashMap;
   8. public class WebServiceClass {
   9. HashMap data = new HashMap() ;
  10. public void init() {
  11. data.put("百度", "李彦宏") ;
  12. data.put("腾讯", "马化腾") ;
  13. data.put("网易", "丁磊") ;
  14. }
  15.
  16. public String get(String key) {
  17. init() ;
  18. return data.get(key) ;
  19. }
  20.
  21. public void put(String key,String value) {
  22. data.put(key, value) ;
  23. }
  24. }

然后把此类编译。

3 把此工程部署到Tomcat,然后转到Tomcat_HOME/webapps/你的工程/web-inf下面,建立一个wsdd文件,本例创建的文件名称为dep.wsdd。
xml 代码

   1. <deployment xmlns="http://xml.apache.org/axis/wsdd/"
   2. xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
   3. <service name="wjhService" provider="java:RPC">
   4. <parameter name="className" value="com.wjh.WebServiceClass"/>
   5. <parameter name="allowedMethods" value="*"/>
   6. service>
   7. deployment>

注意,这里面的className值和上面所建的类的包名一致,其中service的name取值任意,代表的在当前Web应用服务器唯一的WebService标识。

4 运用AXIS的AdminClient工具生成server-config.wsdd文件,即服务器端WebService的声明(行使到这一步,本文假设你已经正确的把AXIS的必须jar文件和其依赖库设置到了classpath,具体设置方式看看的AXIS-打开命令行窗口,进入dep.wsdd文件所在的目录,运行java org.apache.axis.client.AdminClient undeploy.wsdd,如果出现<Admin>Done processing则表明发布成功。

5 在FlexBuilder2中画出Flex界面,本例的界面代码如下:
xml 代码

   1.
   2. <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
   3. <mx:WebService id="ws" wsdl="http://localhost:8080/ws/services/wjhService?wsdl" useProxy="false" showBusyCursor="true">
   4. <mx:operation name="put" result="Alert.show(\'恭喜!添加成功\',\'返回框\',3)" fault="Alert.show(\'添加失败\',\'失败\',3)">
   5.
   6. mx:operation>
   7. <mx:operation name="get" result="showInfo(event)" fault="Alert.show(\'失败\',\'tile\',2)">
   8.
   9. mx:operation>
  10. mx:WebService>
  11.
  12.
  13.
  14. <mx:Panel title="DataGrid Control Example" height="100%" width="100%"
  相关解决方案