Flex与Web应用程序整合技术分享
来源:互联网 发布:淘宝商品取消分销 编辑:程序博客网 时间:2024/06/03 05:47
Flex与Web应用程序整合技术分享
1. 采用BlazeDS进行java应用程序与flex应用程序间的通信。
(1) 在官网上下载blazeds的开发包,最好下载完整版,里面有一个例子和所有我们所需的所有文件(我下载的是blazeds-turnkey-4.0.0.14931版)。将blazeds.war、ds-console.war、samples.war三个文件放在tomcat的webapps目录下
flex-messaging-common.jar
flex-messaging-core.jar
flex-messaging-opt.jar
flex-messaging-proxy.jar
flex-messaging-remoting.jar
backport-util-concurrent.jar
cfgatewayadapter.jar
commons-httpclient-3.0.1.jar
commons-codec-1.3.jar
commons-logging.jar
concurrent.jar
xalan.jar
(2)然后要加入Flex BlazeDS需要的配置文件。在WEB-INF下新建一个名为flex的文件夹,然后将四个xml文件(messagin-config.xml/proxy-config.xml/remoting-config.xml/services-config.xml)拷到该文件夹下。
(3) 修改web.xml文件,加入Flex的配置(直接拷贝即可)。
<context-param>
<param-name>flex.class.path</param-name>
<param-value>/WEB-INF/flex/hotfixes,/WEB-INF/flex/jars</param-value>
</context-param>
<!-- Http Flex Session attribute and binding listener support -->
<listener>
<listener-class>flex.messaging.HttpFlexSession</listener-class>
</listener>
<!-- MessageBroker Servlet -->
<servlet>
<servlet-name>MessageBrokerServlet</servlet-name>
<display-name>MessageBrokerServlet</display-name>
<servlet-class>flex.messaging.MessageBrokerServlet</servlet-class>
<init-param>
<param-name>services.configuration.file</param-name>
<param-value>/WEB-INF/flex/services-config.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>MessageBrokerServlet</servlet-name>
<url-pattern>/messagebroker/*</url-pattern>
</servlet-mapping>
以上步骤需在java项目中完成
2.Flex采用Cairngorm作为前端架构
(1) 在Flex Builder中新建一J2EE项目,并配置服务器路径(在tomcat/webapp/目录下,需关联一web项目)
(2) 在Flex Build Path中引入Cairngorm.swc,查看是否引用了正确的sdk包,如不正确,需重新引用。
(3) 按照Cairngorm架构,在src目录下分别创建bussiness,command,event,model,view文件夹。
其中,view为视图层,model为模型层,event为事件,command为业务逻辑层,bussiness中需创建delegate(中间人角色,command调用web service获得数据时,需创建一个delegate完成,一对一关系),Front Controller(注册event和command的对应关系)和services.mxml(服务定义)。
具体调用过程如下:
n 首先我们要了解我们的数据
n 我们将使用数据来定义View
n 我们将使用View来定义可能的用户动作
n 用户动作将会转化(转变)为Events
n Event将会被映射到Command
n Command可能被映射到Delegate
n Delegate映射到Service
n Command将使用Service传回的结果更新Model Locator
3. Flex和Spring整合
(1) 首先,需要有一个加载bean的工厂类,我的项目中为SpringFactory.java,类中的代码固定
publicclass SpringFactoryimplements FlexFactory{
//定义一个常量资源
privatestaticfinal String SOURCE ="source";
publicvoid initialize(String id, ConfigMap configMap) {
}
/**
*Thismethodiscalledwhenweinitializethedefinitionofaninstance
*whichwillbelookedupbythisfactory. Itshouldvalidatethat
*thepropertiessuppliedarevalidtodefineaninstance.
*Anyvalidpropertiesusedforthisconfigurationmustbeaccessedto
*avoidwarningsaboutunusedconfigurationelements. Ifyourfactory
*isonlyusedforapplicationscopedcomponents,thismethodcansimply
*returnafactoryinstancewhichdelegatesthecreationofthecomponent
*totheFactoryInstance'slookupmethod.
*/
//创建一个factory实例
public FactoryInstance createFactoryInstance(String id, ConfigMap properties) {
//生成一个Spring的实例
SpringFactoryInstance instance =new SpringFactoryInstance(this, id, properties);
instance.setSource(properties.getPropertyAsString(SOURCE, instance.getId()));
return instance;
}
public Object lookup(FactoryInstance inst)
{
SpringFactoryInstance factoryInstance = (SpringFactoryInstance) inst;
return factoryInstance.lookup();
}
//内部静态类
staticclass SpringFactoryInstanceextends FactoryInstance
{
//内部类构造函数
SpringFactoryInstance(SpringFactory factory, String id, ConfigMap properties)
{
super(factory, id, properties);
}
//用于测试
public String toString()
{
return"SpringFactory instance for id=" + getId() + " source=" + getSource() +" scope=" + getScope();
}
//查询
public Object lookup()
{
//这就是从spring容器中getbean了
ApplicationContext appContext = WebApplicationContextUtils.getWebApplicationContext(flex.messaging.FlexContext.getServletConfig().getServletContext());
String beanName = getSource();
try
{
return appContext.getBean(beanName);
}
catch (NoSuchBeanDefinitionException nexc)
{
ServiceException e =new ServiceException();
String msg ="Spring service named '" + beanName +"' does not exist.";
e.setMessage(msg);
e.setRootCause(nexc);
e.setDetails(msg);
e.setCode("Server.Processing");
throw e;
}
catch (BeansException bexc)
{
ServiceException e =new ServiceException();
String msg ="Unable to create Spring service named '" + beanName +"' ";
e.setMessage(msg);
e.setRootCause(bexc);
e.setDetails(msg);
e.setCode("Server.Processing");
throw e;
}
}
}
(2) 在Spring配置文件中注册相应flex实现接口(跟正常配置spring一样)
(3) 在Services-config.xml中加入如下代码:
<factories>
<factoryid="spring"class="flexHandle.SpringFactory"/>
</factories>
指定flex加载bean的工厂类的路径
(4) 最后,在remoting-config.xml中加入如下代码:
<destinationid="Client2Server">
<properties>
<factory>spring</factory>//Flex工厂类
<source>clienToServerManager</source>//Flex接口bean
</properties>
</destination>
参考文档:《整合Flex和Java—配置篇》
《基于Cairngorm的Flex应用程序设计》
参考网站:http://blog.dreamhui.net/archives/64
http://www.iteye.com/topic/180613
http://www.oschina.net/question/12_7654
- Flex与Web应用程序整合技术分享
- Flex与Web应用程序开发
- flex技术分享学习
- SSH与Flex整合
- springMVC与flex 整合
- web-flex整合通信方法
- WEB 技术模拟应用程序
- WEB 技术模拟应用程序
- Web应用程序技术
- 浅谈PHP与Java之Web开发整合技术
- Flex builder3与eclipse整合
- Flex与java整合问题
- Flex与Spring 的整合
- 集成 Flex 与 Ajax 应用程序
- 集成 Flex 与 Ajax 应用程序
- Flex与JavaEE应用程序结合
- 桌面应用程序与web应用程序
- 使用Flex-Ajax Bridge技术控制Flex应用程序
- Java虚拟机学习 - 垃圾收集器
- HDOJ 1078 FatMouse and Cheese(记忆化搜索)
- Nexus入门指南(图文)
- 基于语法分析的PHP webshell扫描工具–Pecker Scanner
- 不同情景的同样问题:开机出现unable to load selinux policy
- Flex与Web应用程序整合技术分享
- Java虚拟机学习 - 对象内存分配与回收
- 黄金分割金华房间
- wget命令
- 巧用alias提高效率
- UI(用户界面)设计规则和规范
- Java虚拟机学习 - 查看JVM参数及值的命令行工具
- Java多线程共享受限资源
- 【C++】拷贝构造函数和赋值符函数