今天寫完後臺,就想研究下使用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,就這樣吧!