使用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包

180749276.png

注意這兩個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中指定路徑。


整個工程看起來就是這樣的

181738476.png



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,就這樣吧!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章