使用flex访问java方法:tomcat+xfire
今天写完后台,就想研究下使用tomcat+xfire发布webService,让前台使用flex写的页面来访问。 虽然xfire已经是一个将要过时的技术。 其实,网上已经有很多类似的帖子,但是找来找去,还是花了很多功夫进行调试,我是一个初学者,写通了一个demo,就希望分享,那怕是大家来拍砖,让我成长(笑)。 1、使用myeclipse新建一个工程(网上说直接使用myeclipse将工程变成webService支持,我不想这样做,老老实实导入jar包)
2、下载xfire 网址:http://repository.codehaus.org/org/codehaus/xfire/xfire-distribution/1.2.6/xfire-distribution-1.2.6.zip 或者,这里是其它版本(我真是好人):http://repository.codehaus.org/org/codehaus/xfire/xfire-distribution/ 注意,要下载zip,如果只下载jar包,还要辛辛苦苦找依赖包。 3、导入jar包 注意这两个servlet,可能引起冲突。 4、后台代码开写呗 需要一个接口 package cn.cty; public interface ISayHello { public String sayHelloFunction(); } 需要一个实现类 package cn.cty; public class SayHello implements ISayHello { @Override public String sayHelloFunction() { System.out.println("sayHelloFunction run!"); return "douglas is here!"; } } 需要一个xfire的配置文件services.xml,这个文件的路径在web.xml中配置(如果不知道怎样写,可以在下载的xfire中的examples文件夹中找到例子) <?xml version="1.0"?> <!-- START SNIPPET: services --> <beans xmlns="http://xfire.codehaus.org/config/1.0"> <!-- END SNIPPET: services --> <service> <name>SayHello</name> <namespace>http://cn.cty/SayHello</namespace> <serviceClass>cn.cty.ISayHello</serviceClass> <implementationClass>cn.cty.SayHello </implementationClass> </service> </beans> 需要在web.xml中配置servlet <?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <display-name></display-name> <servlet> <servlet-name>xFireServlet</servlet-name> <servlet-class>org.codehaus.xfire.transport.http.XFireConfigurableServlet</servlet-class> <!-- 重新指定路径 --> <init-param> <param-name>config</param-name> <param-value>xfire/services.xml</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>xFireServlet</servlet-name> <url-pattern>/services/*</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app> **这里要特别注意: 之前在网上看的,说将xfire的配置文件放在工程的META-INFO/xfire下!但是不同eclipse可能生成的META-INFO目录不同,导致我一直报错,找不到配置文件services.xml,所以在web.xml中指定路径。 整个工程看起来就是这样的 5、测试 发布到tomcat就不说了吧,然后访问 http://127.0.0.1:8080/testXFire/services/SayHello?wsdl 如果成功,那么就得到wsdl了。 (这里一般会发生找不到类或者jar包冲突问题,如果改错,最好到tomcat中将工程删了,重新发布,这只是经验之谈) 6、前台代码开写呗 使用s:webservice来访问 <?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="800" minHeight="600" creationComplete="webServiceop.sayHelloFunction()"> <!-- 用于测试xFire + tomcat + java + flex 的通信 --> <fx:Declarations> <!-- 将非可视元素(例如服务、值对象)放在此处 --> <s:WebService id="webServiceop" wsdl="http://127.0.0.1:8080/testXFire/services/SayHello?wsdl" result="geeting(webServiceop.sayHelloFunction.lastResult)"/> </fx:Declarations> <fx:Script> <![CDATA[ [Bindable] private var returnMessage:String = "nothing"; public function geeting(param:String):void{ returnMessage = param; } ]]> </fx:Script> <s:Panel x="71" y="32" width="781" height="466"> <s:Label text="{returnMessage}"> </s:Label> </s:Panel> </s:Application> creationComplete在所有组件加载完后访问了service服务 s:webservice中的result在请求成功后调用geeting方法,改变了绑定数据returnMessage的值 基本上,这是一个简单的demo,就这样吧! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |