最近因为有时间,所以就弄了弄Flex和Java的整合。用到技术和工具主要是Flex,blazeDS,Spring,Tomcat。在网上看了一些整合的文章,大都差不多。现在我把我自己弄通了的例子和里面的思路。和注意的一些问题全部都写出来。希望给刚开始弄的朋友有一些帮助。要是有什么地方错了,请大家提出来哈。
- 准备:
我用的是:MyEclipse_6.5.0GA_E3.3.2_Installer_A
tomcat6.0
FB3_WWEJ
JDK1.6
blazeDS
- 环境的搭建
新建一个Java web工程,取名为TestSpring(我的是这样)
用blazeDS.war集成Flex和tomcat,
1):把你下载的blazeDS.war和samples.war和ds-console.war放到你tomcat安装路径下的webapps中。当你启动tomcat时,会产生一个blazeds文件夹,这个文件夹里面包含了meta-inf和WEB-INF两个文件。WEB-INF里面的文件就会关键了。
2):给建立的Java web工程添加blazeDS
把tomcat路径webapps/blazeds/WEB-INF/lib下的所有jar包全面放到Java web工程(就是现在建立的TestSpring)中的Webroot/WEB-INF/lib下。
把tomcat路径webapps/blazeds/WEB-INF/flex这个文件夹,复制到Java web工程(就是现在建立的TestSpring)中的Webroot/WEB-INF下。
把tomcat路径webapps/blazeds/WEB-INF下的WEB.XML文件里面的,<listenter/><servlet/> <servlet-mapping/>里面的内容拷贝到Java web工程(就是现在建立的TestSpring)中的Webroot/WEB-INF下的WEB.XML里面。
以上的作用是让自己的Java web工程具备blazeDS功能。
下面我现在将前后台的代码贴出来,大家好看看。例子是在网上看的,不是自己写的哈
在MYEC里面建立一个Java web工程,取名为TestSpring
按照上面的步骤进行。
在cn.org.coral.core.flex.factory目录下建立,FlexSpringFactory和SpringFactoryInstance两个类。
代码分别是
package cn.org.coral.core.flex.factory;
import flex.messaging.FactoryInstance;
import flex.messaging.FlexFactory;
import flex.messaging.config.ConfigMap;
public class FlexSpringFactory implements FlexFactory {
public FactoryInstance createFactoryInstance(String id,ConfigMap properties) {
SpringFactoryInstance instance=new SpringFactoryInstance(this,id,properties);
instance.setSource(properties.getPropertyAsstring(SOURCE,instance.getId()));
return instance;
}
public Object lookup(FactoryInstance ins) {
SpringFactoryInstance factoryInstance=(SpringFactoryInstance)ins;
return factoryInstance.lookup();
}
public void initialize(String arg0,ConfigMap arg1) {
// Todo Auto-generated method stub
}
}
package cn.org.coral.core.flex.factory;
import org.springframework.context.ApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;
import org.springframework.beans.factory.NoSuchBeanDeFinitionException;
import org.springframework.beans.BeansException;
import flex.messaging.FactoryInstance;
import flex.messaging.config.ConfigMap;
import flex.messaging.FlexContext;
import flex.messaging.services.ServiceException;
public class SpringFactoryInstance extends FactoryInstance {
public SpringFactoryInstance(FlexSpringFactory factory,String id,ConfigMap properties)
{
super(factory,properties);
}
public Object lookup()
{
ApplicationContext appContext=WebApplicationContextUtils.getWebApplicationContext(FlexContext.getServletConfig().getServletContext());
String beanName=this.getSource();
try
{
return appContext.getBean(beanName);
}catch(NoSuchBeanDeFinitionException ec)
{
ServiceException e=new ServiceException();
throw e;
}catch (BeansException bexc)
{
ServiceException e = new ServiceException();
throw e;
}
}
}
打开TestSpring工程的Webroot/WEB-INF/flex下的remoting-config.xml。在此XML文件中添加
<destination id ="flexSpringBeanTest">
<properties>
<factory>springFactory</factory>
<source>flexObjectTest</source>
</properties>
</destination> 里面的内容就不解释了哈。
打开TestSpring工程的Webroot/WEB-INF/flex下的services-config.xml。在此XML文件中添加
<factories>
<factory id="springFactory" class="cn.org.coral.core.flex.factory.FlexSpringFactory"/>
</factories>
打开Webroot/WEB-INF下的WEB.XML文件。在此添加SRING的信息
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/classes/applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
此时后台基本OK了。
现在开始配置前台
在FlexBuilder新建一个Flex Project
点击NEXT
Root folder:选择在Tomcat中部署的Java web工程,就是我们前面新建的TestSpring
Root URL:在Tomcat服务器的启动上加上TestSpring,说明我们要启动到TestSpring工程
Context root:编译后Flex的保持路径
点击完成。
Flex工程中的代码如下:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:Script>
<![CDATA[
import mx.rpc.AsyncToken;
import mx.rpc.AbstractOperation;
import mx.rpc.events.ResultEvent;
import mx.controls.Alert;
private function callRO(str:String):void{
//Alert.show("flexSpringBeanTest");
firstRO.say(str);
firstRO.addEventListener(ResultEvent.RESULT,getROResult);
}
private function getROResult(e:ResultEvent) :void {
Alert.show(e.result.toString());
}
//flexObjectTest
]]>
</mx:Script>
<mx:RemoteObject id="firstRO" destination="flexSpringBeanTest"/>
<mx:TextInput x="109" y="28" id="input" text="hello!"/>
<mx:Button x="270" y="28" click="callRO(input.text)" label="请求"/>
</mx:Application>
然后点击新建的FLEX工程中点击属性,点击Flex Build Path出现:
Output folder URL:Flex工程在Tomcat服务器中的启动路径
再选择Flex Compiler
再选择Flex server
Context Root:你的工程的跟目录
最后点击OK。
最后把后台编译好的代码,就是/WEB-INF/classes下的代码,复制到Tomcat中blazeDS的相同目录下。
行了
最后启动Tomcat,试试吧
最好看看blazeDS的工作原理。http://www.javaeye.com/topic/267521.这篇文章可以看看,希望可以对你有帮助。
如果按照上面说的运行不起的话。可以给我留言。我是运行OK了的。