使用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,就这样吧!

你可能感兴趣的:(tomcat,xfire)