Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。
BlazeDS 是一个基于服务器的 Java 远程控制 (remoting) 和 Web 消息传递 (messaging)技术,以LGPL(Lesser GNU Public License)公共许可证书发布。它能够使得后端的 Java 应用程序和运行在浏览器上的Adobe Flex 应用程序相互通信。在Java应用服务器上,它以servlet的形式存在, 因此可以在任何标准Java网络应用中运用它。
Spring通过集成BlazeDS技术,使用AdobeFlex客户端技术整合福互联网的顶级解决方案。SpringFlex主要是Spring集成管理BlazeDS MessageBrober的技术。
使用maven的pom.xml配置文件的方式,添加spring和spring-flex的jar包。
不使用maven项目,可以将下面这些软件包中的jar包,配置成相应的User Library,然后添加到项目中。(由于是自行配置Spring环境,所以需要另外添加logging、aspectj等jar包)。
spring-framework-3.0.3
spring-flex-1.5.0.M1
commons-httpclient-3.1
commons-logging-1.1.1
aopalliance
asm-3.3
aspectj-1.6.6
cglib-2.2
blazeds-turnkey-4.0.0
首先把Spring最基本的环境搭建起来,包括SpringMVC框架。
依次选择:File->new->Web Project。
弹出下面对话框,填写相关信息。一路new。
如下图:
右键单击项目文件,选择MyEclipse->Add Spring Capabilities
然后选择User Libraries。(这里我使用maven添加的Libraries,没有使用MyEclipse自带的)
配置文件的路径和名称。Next。
如图:
点击maven项目中的pom.xml文件,使用MyEclipse自带的maven pom编译器。
选择Dependencies。点击左上方的Add开始搜索,然后添加jar包。或者手动写dependencies下的dependency标签。
当我们添加一个jar包之后,就可以在Dependency Hierarchy视图上看到此包所依赖的jar包,一起引入到项目中。
修改web.xml文件。添加字符过滤,以及dispatcher。
修改dispatcher-servlet.xml文件。添加相应的xmlns,xsi,添加视图解析器,mvc驱动等。
编写控制器类,以及页面映射方法。
在WEB-INF下新建文件夹views,并新建一个jsp页面:index.jsp。
暂时没有定义service和data层,只定义view controller层做简单测试。
此时SpringMVC框架就都搭建完成。
配置tomcat并启动tomcat访问http://localhost:8080...../index.do,如果成功,说明Spring环境已经配置成功了。接下来配置Spring与Flex结合的环境。
Spring与BlazeDS结合必须使用MessageBroker,Flex客户端的HTTP请求将有Spring的DispatcherServlet分发到Spring管理的MessageBroker。使用Spring管理MessageBroker就无需配置BlazeDS MessageBrokerServlet了。
添加BlazeDS相关的jar包:
通过pom搜索blazeds添加相应的jar包。可能版本不是最新的。
或者自行在blazeds-turnkey-4.0.0.rar解压的文件中(路径: blazeds-turnkey-4.0.0.14931\tomcat\webapps\blazeds\WEB-INF\lib)。
添加XML配置文件:
将下载的BlazeDS解压,如:在blazeds-turnkey-4.0.0.14931\tomcat\webapps\blazeds\WEB-INF路径下的flex整个文件,copy到项目中WEB-INF下。
将Spring的DispatcherServlet对应的servlet-mapping的url-pattern改成/messagebroker/*。改完效果如下实例:
Spring提供了简化的XML配置命令来再在Spring的WebApplicationContext中配置(dispatcher-servlet.xml)MessageBroker,需要是这些命名空间支持需要在SpringXML配置文件中添加相应的架构。
典型配置如下例子:
这使Spring BlazeDS 集成了flex命名空间,可在配置文件中使用。
最基本的配置,需要在Spring的WebApplicationContext中声明一个MessageBrokerFactoryBean的Bean,以便将传去的请求引导到MessageBroder中,以及Spring管理MessageBroker需要的MessageBrokerHandlerAdapter和HandlerMapping(一般为SimpleUrlHandlerMapping)。
这些bean可以使用message-broker标签来自动注册。例如最简单的方法:
这样设置MessageBroker和必要的基础默认配置。默认值可以被重写,配置message-broker标签的属性和他的子元素。
例如BlazeDS XML配置文件默认位置为:/ WEB-INF/flex/services-config.xml。但可以使用services-config-path属性重新配置路径。classpath在maven项目中默认为src/main/resources路径下。
使用Spring管理MessageBroker可以使Spring的beans很方便的被Flex客户端直接远程调用。MessageBroker处理在Flex AMF与Java传送的序列化和反序列化的数据格式。
通过xml配置文件进行配饰Remoting Service时,只需要声明这个允许被调用的Java类的一个bean,再将这个bean声明成一个remoting-destination。如下示例:
也可以写成:
使用上面方式声明remoting-destination时,必须保证添加了flex:message-broker标签。
@RemotingDestination注解用于基于注解的remoting-destination配置而替换xml方法。@RemotingDestination使用在类级别上一标记此类为remoting-destination。@ RemotingInclude和 @ RemotingExclude注解用在方法级别上,进行标记@RemotingDestination注解类中的方法,是“包括”还是“不包括”此类remoting-destination远程调用。
另,被@RemotingDestination注解的类,必须声明成一个bean。例如Service层或Controller层的功能类。
下面给出一个简单的例子,controller层类被声明成remoting-destination:
@RemotingDestination中的value为destination的id(Flex端的RemoteObject需要配置此属性),channels为AMP通道。
在Flex端,使用RemoteObject就可以直接调用Java端的remoting-destination中的方法。需要配置endpoint和destination。
Endpoint一般路径为:http://[java项目IP地址]:[端口号]/[项目名称]/messagebroker/amf;
Destination为Java端的remoting-destination的id。例如在2.2.2中的例子中,Destination值为flexGeneralController。
如下例子:
自定义消息拦截器,可以用于处理特殊逻辑在AMF传入传出java 表单的时候。例如,用拦截器检查传入消息的内容,或者给返回信息进行额外统一的操作。
通过实现org.springframework.flex.core.MessageInterceptor接口就可以进行自定义message拦截器。然后必须配置成Spring Bean,在用XML命名空间关联此bean。
如下实例:自定义message拦截器:CustomMessageInterceptor,和xml文件的配置方法。
需要在xml文件中添加bean,和关联bean。
在服务器发生异常时,会将这个异常对象传播到Flex客户端,但必须将这个原始异常转换翻译成flex.messaging.MessageException 的一个实例。如果不进行翻译工作,一般“Server.Processing”错误将传播到Flex客户端,这样客户端就无法根据错误的原因而作处理。通常情况下,将转换成Spring安全异常MessageException,但也可以使用自定义的应用程序级别异常进行转换。
通过实现org.springframework.flex.core.ExceptionTranslator接口进行自定义异常转换器。然后必须配置成Spring Bean,在用XML命名空间关联此bean。
接口的handles方法的返回值来控制是否进行翻译。返回false不进行翻译工作。返回true则就会去执行接口的translate方法进行异常转换。
如下实例:自定义Exception Translators:CustomExceptionTranslator,和xml文件的配置方法。
需要在xml文件中添加bean,和关联bean。