配置Flex+BlazeDS+Spring

来源:互联网 发布:网络诈骗案 编辑:程序博客网 时间:2024/04/30 04:52

 

开发环境:Eclipse+FlexBuilder.其中Flex Builder可以集成到Eclipse.

1.        准备程序包:BlazeDS的开发包.Spring-Flex 1.0

2.        创建一个web项目.把源代码目录改为javasrc以便和flex的源代码区分开来.

3.        创建java服务类.代码如下:

package cn.hk.demo.service.impl;

 

import cn.hk.demo.service.HelloService;

 

public class HelloServiceImpl implements HelloService

{

 

        public String sayHello()

        {

           return "Hello Flexwith Spring and BlazeDS";

        }

 

}

4.        配置BlazeDS环境.

解压blazeds.war.WEB-INF中的flex目录放到工程的WEB-INF目录下.里面的.xml文件是配置flexjava通信的默认channeljava adapter.如果不进行其他的配置可以不对这些文件进行修改.web.xml中添加flexlistener代码如下:

<listener>

<listener-class>flex.messaging.HttpFlexSession</listener-class>

</listener>

接着添加BlazeDS的依赖包就可以完成BlazeDS的配置.

5.        增加Spring支持.

Spring-flexjar添加的项目运行库中.配置web.xml加入以下内容:

<servlet>

<servlet-name>Spring MVC Dispatcher Servlet</servlet-name>

<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

    <init-param>

        <param-name>contextConfigLocation</param-name>

        <param-value>/WEB-INF/spring-config.xml</param-value>

    </init-param>

    <load-on-startup>1</load-on-startup>

</servlet>

 <servlet-mapping>

<servlet-name>Spring MVC Dispatcher Servlet</servlet-name>

<url-pattern>/messagebroker/*</url-pattern>

<servlet-mapping>

以上是添加Spring DispatcherServlet配置.SpringDispatcherServlet来转发Flex的请求.这样可以让后台的代码利用Spring的特性.并且服务也可以通过Spring来暴露.

WEB-INF中创建spring-config.xml文件.在不结合Spring的情况下BlazeDSServlet是需要在web.xml中配置.现在只须把BlazeDS的相关类托管给Spring容器.spring-config.xml的配置如下:

<beanid="_messageBroker"

                   class="org.springframework.flex.core.MessageBrokerFactoryBean">

</bean>

<bean

         class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">

         <propertyname="mappings">

                   <value>/*=_messageBroker</value>

         </property>

</bean>

<bean class="org.springframework.flex.servlet.MessageBrokerHandlerAdapter"/>

接着配置需要暴露的服务类:

<beanid="hello"class="org.springframework.flex.remoting.RemotingDestinationExporter">

         <propertyname="messageBroker" ref="_messageBroker"/>

         <property name="service"ref="helloService"/>

</bean>

        

<beanid="helloService" class="com.newland.demo.service.impl.HelloServiceImpl">

</bean>

至此后台整合完成.将项目发布到服务器中,启动服务器.

6.        添加Flex客户端.

如果Flex Builder不是独立的话.右击项目选择Flex Projec Nature->Add Flex Projec Nature

如果Flex Builder是独立的话.直接新建Flex项目.

选择后台技术为J2EE.

配置服务器路径,路径必须很发布的项目一致.修改flex文件输出目录,这个名称可以自己命名:

如果是集成环境的话还需要配置一下项目的Flex SDK路径.独立的Flex Builder就不用.

7.        编写客户端代码

<?xml version="1.0"encoding="utf-8"?>

<mx:Applicationxmlns:mx="http://www.adobe.com/2006/mxml"layout="absolute"creationComplete="init();" backgroundColor="White">

       <mx:Script>

              <![CDATA[

                     import mx.managers.IBrowserManager;

                     importmx.rpc.events.FaultEvent;

                     importmx.rpc.events.ResultEvent;

                     importmx.managers.BrowserManager;

                     importmx.controls.Alert;

                     importmx.rpc.remoting.mxml.RemoteObject;

                    

                     private function init():void

                     {

                            varbrowerManager:IBrowserManager =BrowserManager.getInstance();

                            browerManager.init();

                            varurl:String=browerManager.url;

                            varurls:Array=url.split("/");

                            varremote:RemoteObject=newRemoteObject();

                            remote.destination="hello";

                            remote.addEventListener(ResultEvent.RESULT,result);

                            remote.addEventListener(FaultEvent.FAULT,fault);

                            remote.endpoint="http://"+urls[2]+"/"+urls[3]+"/messagebroker/amf"

                            remote.sayHello();

                     }

                    

                     private functionresult(event:ResultEvent):void

                     {

                            Alert.show(event.result.toString(),"成功");

                     }

                     private functionfault(event:FaultEvent):void

                     {

                            Alert.show(event.fault.toString(),"失败");

                     }

              ]]>

       </mx:Script>

</mx:Application>

 

RemoteObject对象的destination是要访问的服务的名称,也就是Spring所暴露出的服务的id.需要注意的是RemoteObject对象的endpoint的路径.如果不配置的话将找不到destination.

 

====================================================

 

实习的时候整的东西...  remote.endpoint="http://"+urls[2]+"/"+urls[3]+"/messagebroker/amf"这个有更好的写法