加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

使用自己发布的WebService与Flex通信

发布时间:2020-12-17 02:39:52 所属栏目:安全 来源:网络整理
导读:? 前几天发了个Flex利用HttpService和XML与后台的Servlet通信的例子,今天再给大家展示下本人近几天的学习成果----发布一个WebService,并利用其做为Flex与Java通信的桥梁。最后,我会给出在做这个例子时遇到的一些困难和解决方案。希望对大家有些帮助!
?

前几天发了个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,具体设置方式看看JavaEye的AXIS-http://www.javaeye.com/subject/Axis-Webservice打开命令行窗口,进入dep.wsdd文件所在的目录,运行java org.apache.axis.client.AdminClient? undeploy.wsdd,如果出现<Admin>Done?processing则表明发布成功。

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

xml 代码
  1. xml?version="1.0"?encoding="utf-8"?>??
  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%"? ??
  15. ????????paddingTop="10"?paddingLeft="10"?paddingRight="10">??
  16. ????????<mx:Label?x="10"?y="10"?text="公司"?height="39"?width="55"?fontSize="21"?fontWeight="bold"/>??
  17. ????????<mx:TextInput?x="61"?y="10"?height="31"?id="company"/>??
  18. ????????<mx:Label?x="10"?y="66"?text="老大"?width="55"?height="49"?fontSize="21"?fontWeight="bold"/>??
  19. ????????<mx:TextInput?x="61"?y="75"?height="31"?id="ceo"/>??
  20. ????????<mx:Button?label="添加"?height="37"?fontSize="17"?id="add"?click="addCompany();"/>??
  21. ????????<mx:Button??label="查看"?height="29"?fontSize="17"?id="see"?click="seeCeo();"/>??
  22. ???????? ??
  23. ????mx:Panel>??
  24. >??
?

上面代码的 标签的wsdl属性是我们前面发布的WebService。

大致的流程是这个样子的:添加个功能基本上没有什么作用(具体原因我会在后面阐述),主要是查看功能,因为我们前面的服务提供类定义了一个HashMap,并存储了一些数值,所以当我们输入键值时,服务期会返回相应的value。

6 打完收工,尽情的享受WebService吧!!!

Important:

这个例子虽然简单,但是确遇到了很多问题。

1? 问题描述:生成server-config.wsdd文件时,AdminClient不会报错,也出现发布成功的信号,但是web-inf下就是没有server-config.wsdd文件生成。

?? 解决方案:Tomcat版本过低,更换Tomcat版本,最好是Tomcat5.5及以上版本。我的是5.0就出现了此问题。

2? 问题描述:Flex在运行时一篇深绿色,自己写上去的组件全部“潜水”,消失了!这个问题是最诡异的。

??? 解决方案:本人一行一行代码的测,结果终于解决了这个问题。但是我不敢确定是不是这里的问题。我在自己的

3? 大家看到我的服务提供类里面的get方法体第一句话是init方法的调用,刚开始写的时候我是直接return的,但是这样做时,当我点击界面的查看按钮时,Flex不会报错,但也没有任何值返回来,于是我先进行添加再进行查看,也没有任何效果,最后我把init方法调用放在了get的方法体,这样才能成功。

在此我有个疑问:是不是Flex在调用后台Web服务提供类的时候,是不是每次请求都要进行一次类的实例化?但是我自己都不太相信这个假想,假如不是这样,那我遇到的问题又怎么解释呢?欢迎道友给出见解!!!

附件是本例的源代码!!!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读