开发环境:Eclipse+Flex Builder.其中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 Flex with Spring and BlazeDS";
}
}
4. 配置BlazeDS环境.
解压blazeds.war.把WEB-INF中的flex目录放到工程的WEB-INF目录下.里面的.xml文件是配置flex和java通信的默认channel和java adapter.如果不进行其他的配置可以不对这些文件进行修改.在web.xml中添加flex的listener代码如下:
<listener>
<listener-class>flex.messaging.HttpFlexSession</listener-class>
</listener>
接着添加BlazeDS的依赖包就可以完成BlazeDS的配置.
5. 增加Spring支持.
把Spring-flex的jar添加的项目运行库中.配置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配置.让Spring DispatcherServlet来转发Flex的请求.这样可以让后台的代码利用Spring的特性.并且服务也可以通过Spring来暴露.
在WEB-INF中创建spring-config.xml文件.在不结合Spring的情况下BlazeDS的Servlet是需要在web.xml中配置.现在只须把BlazeDS的相关类托管给Spring容器.spring-config.xml的配置如下:
<bean id="_messageBroker"
class="org.springframework.flex.core.MessageBrokerFactoryBean">
</bean>
<bean
class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<value>/*=_messageBroker</value>
</property>
</bean>
<bean class="org.springframework.flex.servlet.MessageBrokerHandlerAdapter" />
接着配置需要暴露的服务类:
<bean id="hello" class="org.springframework.flex.remoting.RemotingDestinationExporter">
<property name="messageBroker" ref="_messageBroker"/>
<property name="service" ref="helloService"/>
</bean>
<bean id="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:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="init();" backgroundColor="White">
<mx:Script>
<![CDATA[
import mx.managers.IBrowserManager;
import mx.rpc.events.FaultEvent;
import mx.rpc.events.ResultEvent;
import mx.managers.BrowserManager;
import mx.controls.Alert;
import mx.rpc.remoting.mxml.RemoteObject;
private function init():void
{
var browerManager:IBrowserManager =BrowserManager.getInstance();
browerManager.init();
var url:String=browerManager.url;
var urls:Array=url.split("/");
var remote:RemoteObject=new RemoteObject();
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 function result(event:ResultEvent):void
{
Alert.show(event.result.toString(),"成功");
}
private function fault(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"这个有更好的写法