前几天发了个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 代码
-
-
-
-
-
- package com.wjh;
- import java.util.HashMap;
- public class WebServiceClass {
- HashMap data = new HashMap() ;
- public void init() {
- data.put("百度", "李彦宏") ;
- data.put("腾讯", "马化腾") ;
- data.put("网易", "丁磊") ;
- }
-
- public String get(String key) {
- init() ;
- return data.get(key) ;
- }
-
- public void put(String key,String value) {
- data.put(key, value) ;
- }
- }
然后把此类编译。
3 把此工程部署到Tomcat,然后转到Tomcat_HOME/webapps/你的工程/web-inf下面,建立一个wsdd文件,本例创建的文件名称为dep.wsdd。
xml 代码
- <deployment xmlns="http://xml.apache.org/axis/wsdd/"
- xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
- <service name="wjhService" provider="java:RPC">
- <parameter name="className" value="com.wjh.WebServiceClass"/>
- <parameter name="allowedMethods" value="*"/>
- service>
- deployment>
注意,这里面的className值和上面所建的类的包名一致,其中service的name取值任意,代表的在当前Web应用服务器唯一的WebService标识。
4 运用AXIS的AdminClient工具生成server-config.wsdd文件,即服务器端WebService的声明(行使到这一步,本文假设你已经正确的把AXIS的必须jar文件和其依赖库设置到了classpath,具体设置方式看看JavaEye的AXIS-http://www.iteye.com/subject/Axis-Webservice打开命令行窗口,进入dep.wsdd文件所在的目录,运行java org.apache.axis.client.AdminClient undeploy.wsdd,如果出现<Admin>Done processing则表明发布成功。
5 在FlexBuilder2中画出Flex界面,本例的界面代码如下:
xml 代码
- <!---->xml version="1.0" encoding="utf-8"?>
- <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
- <mx:WebService id="ws" wsdl="http://localhost:8080/ws/services/wjhService?wsdl" useProxy="false" showBusyCursor="true">
- <mx:operation name="put" result="Alert.show('恭喜!添加成功','返回框',3)" fault="Alert.show('添加失败','失败',3)">
-
- mx:operation>
- <mx:operation name="get" result="showInfo(event)" fault="Alert.show('失败','tile',2)">
-
- mx:operation>
- mx:WebService>
-
-
-
- <mx:Panel title="DataGrid Control Example" height="100%" width="100%"
- paddingTop="10" paddingLeft="10" paddingRight="10">
- <mx:Label x="10" y="10" text="公司" height="39" width="55" fontSize="21" fontWeight="bold"/>
- <mx:TextInput x="61" y="10" height="31" id="company"/>
- <mx:Label x="10" y="66" text="老大" width="55" height="49" fontSize="21" fontWeight="bold"/>
- <mx:TextInput x="61" y="75" height="31" id="ceo"/>
- <mx:Button label="添加" height="37" fontSize="17" id="add" click="addCompany();"/>
- <mx:Button label="查看" height="29" fontSize="17" id="see" click="seeCeo();"/>
-
- mx:Panel>
- >
上面代码的<mx:webservice>标签的wsdl属性是我们前面发布的WebService。</mx:webservice>
大致的流程是这个样子的:添加个功能基本上没有什么作用(具体原因我会在后面阐述),主要是查看功能,因为我们前面的服务提供类定义了一个HashMap,并存储了一些数值,所以当我们输入键值时,服务期会返回相应的value。
6 打完收工,尽情的享受WebService吧!!!
Important:
这个例子虽然简单,但是确遇到了很多问题。
1 问题描述:生成server-config.wsdd文件时,AdminClient不会报错,也出现发布成功的信号,但是web-inf下就是没有server-config.wsdd文件生成。
解决方案:Tomcat版本过低,更换Tomcat版本,最好是Tomcat5.5及以上版本。我的是5.0就出现了此问题。
2 问题描述:Flex在运行时一篇深绿色,自己写上去的组件全部“潜水”,消失了!这个问题是最诡异的。
解决方案:本人一行一行代码的测,结果终于解决了这个问题。但是我不敢确定是不是这里的问题。我在自己的<mx:script>标签里面写下了这么两句话public var s1:String=company.text; public var s2:String=ceo.text;结果界面就如问题描述一样,当我把这两句话去掉以后,界面就显示正常。是不是Flex里不允许把文本框之类组件的值直接赋刚定义的变量呢???哪位兄弟可以解开我这个疑问???</mx:script>
3 大家看到我的服务提供类里面的get方法体第一句话是init方法的调用,刚开始写的时候我是直接return的,但是这样做时,当我点击界面的查看按钮时,Flex不会报错,但也没有任何值返回来,于是我先进行添加再进行查看,也没有任何效果,最后我把init方法调用放在了get的方法体,这样才能成功。
在此我有个疑问:是不是Flex在调用后台Web服务提供类的时候,是不是每次请求都要进行一次类的实例化?但是我自己都不太相信这个假想,假如不是这样,那我遇到的问题又怎么解释呢?欢迎道友给出见解!!!
附件是本例的源代码!!!
- source.rar (1.6 KB)
- 描述: 类源代码,dep.wsdd,Flex界面
- 下载次数: 480
分享到:
- 2007-11-03 21:56
- 浏览 7372
- 评论(2)
- 论坛回复 / 浏览 (2 / 7544)
- 查看更多
相关推荐
在本主题中,我们将深入探讨如何使用Flex调用Web服务,尤其是与Java程序的交互。 1. **Flex与Web服务的交互** Flex可以通过SOAP(简单对象访问协议)或AMF(动作消息格式)来调用Web服务。SOAP是一种基于XML的通信...
本篇文章将深入探讨如何利用Flex 4.0中的HttpService和WebService组件与Java Struts2框架构建的服务器进行通信。 首先,我们来看HttpService。HttpService是ActionScript 3.0中的一个类,用于发起HTTP请求,通常...
- Flex客户端调用:在Flex中使用HTTPService或WebService组件,配置URL和方法名,调用Java服务。 2. SOAP通信: - Java Web Service:使用JAX-WS或Apache CXF等库创建符合SOAP规范的Web服务。 - WSDL:编写WSDL...
标题中的“用webservice连接flex加...这个项目示例可以帮助开发者了解Flex与C#.NET之间的集成方式,以及如何通过WebService进行跨平台的数据通信。理解并掌握这一技术,对于开发分布式、跨平台的Web应用具有重要意义。
当Spring与Flex结合,可以实现后端服务与前端交互的无缝对接,而WebService作为一种跨平台、跨语言的数据交换标准,恰好扮演了两者之间的桥梁角色。本文将深入探讨Spring如何整合Flex以及如何通过WebServices实现...
在本教程中,“五分钟用Flex构建WebService应用”将带你快速掌握如何利用Flex与WebService进行数据交互,这对于开发动态、实时更新的Web应用至关重要。 WebService是一种基于Web的、平台无关的服务,它通过HTTP协议...
总之,Flex与WebService结合使用,能够创建高效、跨平台的文件上传和下载解决方案。理解并掌握这一技术,对于开发人员来说是非常有价值的,尤其是在构建企业级RIA应用时。通过深入学习和实践,你可以进一步提升在RIA...
在“纯flex网站前台(httpservice、webservice进行数据交互)”这个项目中,我们主要关注的是如何使用Flex来实现与服务器端的数据通信,这涉及到HTTPService和WebService两种技术。 1. **Flex框架**:Flex提供了一...
三、Flex与PHP的通信:在PHP环境中,Flex通常使用HTTPService或WebService组件与PHP进行通信。HTTPService可以发送HTTP GET或POST请求,而WebService则处理基于SOAP协议的服务调用。此外,PHP还可以使用AMF-PHP库来...
通过分析和学习Flex WebService Demo,开发者可以了解如何在Flex应用中实现与服务器的无缝通信,这对于创建动态、交互性强的RIA至关重要。同时,这个Demo还可能演示了如何处理异步调用、数据转换、以及如何将服务器...
在本文中,我们将深入探讨如何使用Adobe Flex调用Web Service来开发一个天气预报服务。Flex是一种基于MXML和ActionScript的开源框架,用于构建富互联网应用程序(RIA)。它允许开发者创建交互性强、用户体验良好的...
Flex调用WebService例子是一个典型的跨平台通信场景,它结合了Adobe Flex前端开发框架与XFire作为后台的Web服务实现。Flex是一种基于ActionScript和MXML的开放源代码框架,用于构建富互联网应用程序(RIA),而...
3. **C#服务器端配合Flex通信** - **C#与AMF**:在C#中,可以使用第三方库如AMF.NET或Rediska.NET来实现AMF通信协议,使得C#服务器能够理解并处理Flex客户端发送的AMF消息。 - **服务端接口设计**:为了与Flex的...
在“JavaFlex项目”这个压缩包中,很可能包含了使用Java和Flex进行通信的示例代码,包括Java端的服务实现、BlazeDS配置以及Flex端的HTTPService或WebService调用。通过分析和学习这些代码,你可以更好地理解和掌握...
如果需要与符合SOAP协议的Web服务通信,Flex提供了WebService组件。在这个例子中,假设已经有一个Web服务提供了一组操作。在Flex中,创建一个WebService实例,指定Web服务的WSDL地址,并绑定所需的方法。同样,也...
在这种场景下,WebService作为一种标准的跨平台通信方式,使得Flex客户端能够方便地与.NET环境下的C#服务进行数据交互。 在Flex中,我们通常使用以下三种标签来实现远程数据访问: 1. `<mx:WebService>`:专门用来...
"webService+flex"的组合意味着我们要探讨如何使用Flex客户端与Web服务进行交互。 **Web服务**,通常基于SOAP(简单对象访问协议)或REST(表述性状态转移)架构,提供了标准化的方法来交换数据。它们可以是XML、...
在本文中,我们将深入探讨如何使用Flex调用WebService来访问MSSQL数据库。Flex是一种用于构建富互联网应用程序(RIA)的开发框架,它允许开发者创建交互性强、用户体验丰富的Web应用。而WebService则是一种通过网络...
在Flex中,可以通过调用WebService来实现与远程服务器的数据交换,这在跨平台数据交互和分布式系统中非常常见。本篇文章将深入探讨Flex如何基于WebService进行数据访问。 一、Flex与WebService基础 WebService是一...