今天写完后台,就想研究下使用tomcat+xfire发布webService,让前台使用flex写的页面来访问。
虽然xfire已经是一个将要过时的技术。
其实,网上已经有很多类似的帖子,但是找来找去,还是花了很多功夫进行调试,我是一个初学者,写通了一个demo,就希望分享,那怕是大家来拍砖,让我成长(笑)。
1、使用myeclipse新建一个工程(网上说直接使用myeclipse将工程变成webService支持,我不想这样做,老老实实导入jar包)
2、下载xfire
或者,这里是其它版本(我真是好人):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,就这样吧!
转载于:https://blog.51cto.com/hlyton/1307612