`

SpringFlex框架搭建

    博客分类:
  • flex
 
阅读更多

一、Spring环境的搭建

1.1 简单介绍

         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的技术。

 

1.2 需要的软件包

        使用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


1.3 搭建Spring环境

        首先把Spring最基本的环境搭建起来,包括SpringMVC框架。


1.3.1新建java Web项目(带Maven)

依次选择:File->new->Web Project。
弹出下面对话框,填写相关信息。一路new。

如下图:


 

 

1.3.2加入Spring框架

右键单击项目文件,选择MyEclipse->Add Spring Capabilities
然后选择User Libraries。(这里我使用maven添加的Libraries,没有使用MyEclipse自带的)
配置文件的路径和名称。Next。

如图:


 

1.3.3使用pom.xml添加jar包

 点击maven项目中的pom.xml文件,使用MyEclipse自带的maven pom编译器。
 选择Dependencies。点击左上方的Add开始搜索,然后添加jar包。或者手动写dependencies下的dependency标签。
 当我们添加一个jar包之后,就可以在Dependency Hierarchy视图上看到此包所依赖的jar包,一起引入到项目中。

如图:
 

 

 

1.3.4修改配置文件

修改web.xml文件。添加字符过滤,以及dispatcher。

Xml代码  收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   
  5.     http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">  
  6.   
  7.     <!-- 字符集 过滤器  -->  
  8.     <filter>  
  9.         <filter-name>CharacterEncodingFilter</filter-name>  
  10.         <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>  
  11.         <init-param>  
  12.             <param-name>encoding</param-name>  
  13.             <param-value>UTF-8</param-value>  
  14.         </init-param>  
  15.         <init-param>  
  16.             <param-name>forceEncoding</param-name>  
  17.             <param-value>true</param-value>  
  18.         </init-param>  
  19.     </filter>  
  20.     <filter-mapping>  
  21.         <filter-name>CharacterEncodingFilter</filter-name>  
  22.         <url-pattern>/*</url-pattern>  
  23.     </filter-mapping>  
  24.   
  25.     <!-- Spring view分发器 -->  
  26.     <servlet>  
  27.         <servlet-name>dispatcher</servlet-name>  
  28.         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  
  29.         <init-param>  
  30.             <param-name>contextConfigLocation</param-name>  
  31.             <param-value>/WEB-INF/dispatcher-servlet.xml</param-value>  
  32.         </init-param>  
  33.         <load-on-startup>1</load-on-startup>  
  34.     </servlet>  
  35.     <servlet-mapping>  
  36.         <servlet-name>dispatcher</servlet-name>  
  37.         <url-pattern>*.do</url-pattern>  
  38.     </servlet-mapping>  
  39.       
  40. </web-app>  

 


 修改dispatcher-servlet.xml文件。添加相应的xmlns,xsi,添加视图解析器,mvc驱动等。

Xml代码  收藏代码
  1. <aop:aspectj-autoproxy />  
  2. <mvc:annotation-driven />  
  3. <context:component-scan base-package="com.springFlex.example" />  
  4.   
  5.   
  6. <bean  
  7.     class="org.springframework.web.servlet.view.InternalResourceViewResolver">  
  8.     <property name="prefix" value="/WEB-INF/views/" />  
  9.     <property name="suffix" value=".jsp" />  
  10. </bean>  

 

1.3.5编写Controller和RequestMapping

 编写控制器类,以及页面映射方法。

Java代码  收藏代码
  1. @Controller  
  2. public class GeneralController {  
  3.   
  4.     @RequestMapping(value="index.do")  
  5.     public void indexPage(){  
  6.         System.out.println("访问页面 - index.jsp");  
  7.     }  
  8. }  

 

1.3.6添加jsp页面

在WEB-INF下新建文件夹views,并新建一个jsp页面:index.jsp。

 

 

1.3.7测试

暂时没有定义service和data层,只定义view controller层做简单测试。
此时SpringMVC框架就都搭建完成。
配置tomcat并启动tomcat访问http://localhost:8080...../index.do,如果成功,说明Spring环境已经配置成功了。接下来配置Spring与Flex结合的环境。

 

二、配置使用SpringFlex

 

2.1SpringFlex的基本配置

        Spring与BlazeDS结合必须使用MessageBroker,Flex客户端的HTTP请求将有Spring的DispatcherServlet分发到Spring管理的MessageBroker。使用Spring管理MessageBroker就无需配置BlazeDS MessageBrokerServlet了。

 

 

2.1.1添加Flex配置文件和BlazeDS包

        添加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下。

 

 

 

2.1.2配置Spring的DispatcherServlet

将Spring的DispatcherServlet对应的servlet-mapping的url-pattern改成/messagebroker/*。改完效果如下实例:

Xml代码  收藏代码
  1. <servlet>  
  2.     <servlet-name>dispatcher</servlet-name>  
  3.     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  
  4.     <init-param>  
  5.         <param-name>contextConfigLocation</param-name>  
  6.         <param-value>/WEB-INF/dispatcher-servlet.xml</param-value>  
  7.     </init-param>  
  8.     <load-on-startup>1</load-on-startup>  
  9. </servlet>  
  10. <servlet-mapping>  
  11.     <servlet-name>dispatcher</servlet-name>  
  12.     <url-pattern>/messagebroker/*</url-pattern>  
  13. </servlet-mapping>  
  14.    

 

 

 

2.1.3在Spring中配置MessageBroker

Spring提供了简化的XML配置命令来再在Spring的WebApplicationContext中配置(dispatcher-servlet.xml)MessageBroker,需要是这些命名空间支持需要在SpringXML配置文件中添加相应的架构。

典型配置如下例子:

 

Xml代码  收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.     xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context"  
  4.     xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:tx="http://www.springframework.org/schema/tx"  
  5.     xmlns:flex="http://www.springframework.org/schema/flex" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  6.     xsi:schemaLocation="http://www.springframework.org/schema/aop   
  7.         http://www.springframework.org/schema/aop/spring-aop-3.0.xsd   
  8.         http://www.springframework.org/schema/beans   
  9.         http://www.springframework.org/schema/beans/spring-beans-3.0.xsd   
  10.         http://www.springframework.org/schema/context   
  11.         http://www.springframework.org/schema/context/spring-context-3.0.xsd   
  12.         http://www.springframework.org/schema/mvc   
  13.         http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd   
  14.         http://www.springframework.org/schema/tx   
  15.         http://www.springframework.org/schema/tx/spring-tx-3.0.xsd  
  16.         http://www.springframework.org/schema/flex   
  17.         http://www.springframework.org/schema/flex/spring-flex-1.0.xsd">  
  18.   
  19. </beans>  

 

 

        这使Spring BlazeDS 集成了flex命名空间,可在配置文件中使用。
        最基本的配置,需要在Spring的WebApplicationContext中声明一个MessageBrokerFactoryBean的Bean,以便将传去的请求引导到MessageBroder中,以及Spring管理MessageBroker需要的MessageBrokerHandlerAdapter和HandlerMapping(一般为SimpleUrlHandlerMapping)。
        这些bean可以使用message-broker标签来自动注册。例如最简单的方法:

Xml代码  收藏代码
  1. <flex:message-broker/>  

 

        这样设置MessageBroker和必要的基础默认配置。默认值可以被重写,配置message-broker标签的属性和他的子元素。
        例如BlazeDS XML配置文件默认位置为:/ WEB-INF/flex/services-config.xml。但可以使用services-config-path属性重新配置路径。classpath在maven项目中默认为src/main/resources路径下。

Xml代码  收藏代码
  1. <flex:message-broker services-config-path="classpath*:services-config.xml"/>  

 

 

2.2Flex Remoting调用Spring Bean

使用Spring管理MessageBroker可以使Spring的beans很方便的被Flex客户端直接远程调用。MessageBroker处理在Flex AMF与Java传送的序列化和反序列化的数据格式。

 

2.2.1配置Remoting Service

通过xml配置文件进行配饰Remoting Service时,只需要声明这个允许被调用的Java类的一个bean,再将这个bean声明成一个remoting-destination。如下示例:

Xml代码  收藏代码
  1. <bean id="flexGeneralController" class="com.springFlex.example.view.flex.FlexGeneralController"/>  
  2. <flex:remoting-destination ref="flexGeneralController"/>  

 

也可以写成:

Xml代码  收藏代码
  1. <bean id="flexGeneralController" class="com.springFlex.example.view.flex.FlexGeneralController">  
  2.     <flex:remoting-destination/>  
  3. </bean>  

 
 使用上面方式声明remoting-destination时,必须保证添加了flex:message-broker标签。

 

 

 

2.2.2使用@RemotingDestination

        @RemotingDestination注解用于基于注解的remoting-destination配置而替换xml方法。@RemotingDestination使用在类级别上一标记此类为remoting-destination。@ RemotingInclude和 @ RemotingExclude注解用在方法级别上,进行标记@RemotingDestination注解类中的方法,是“包括”还是“不包括”此类remoting-destination远程调用。
        另,被@RemotingDestination注解的类,必须声明成一个bean。例如Service层或Controller层的功能类。

 

        下面给出一个简单的例子,controller层类被声明成remoting-destination:

Java代码  收藏代码
  1. @Controller(value="flexGeneralController")  
  2. @RemotingDestination(value="flexGeneralController", channels="my-amf")  
  3. public class FlexGeneralController {  
  4.   
  5.     @RemotingInclude  
  6.     public String getName(String name) {  
  7.         return "hello:" + name;  
  8.     }  
  9.       
  10.     @RemotingExclude  
  11.     public double getSqrt(int number) {  
  12.         return Math.sqrt(number);  
  13.     }  
  14. }  

 

 @RemotingDestination中的value为destination的id(Flex端的RemoteObject需要配置此属性),channels为AMP通道。

 

 

 

2.2.3Flex端的RemoteObject

在Flex端,使用RemoteObject就可以直接调用Java端的remoting-destination中的方法。需要配置endpoint和destination。
Endpoint一般路径为:http://[java项目IP地址]:[端口号]/[项目名称]/messagebroker/amf;
Destination为Java端的remoting-destination的id。例如在2.2.2中的例子中,Destination值为flexGeneralController。


 如下例子:

Java代码  收藏代码
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"   
  3.                 minWidth="955" minHeight="600">  
  4.     <mx:Script>  
  5.         <![CDATA[  
  6.             import mx.controls.Alert;  
  7.             import mx.messaging.ChannelSet;  
  8.             import mx.messaging.channels.AMFChannel;  
  9.             import mx.rpc.Fault;  
  10.             import mx.rpc.events.FaultEvent;  
  11.             import mx.rpc.events.ResultEvent;  
  12.               
  13.             protected function button1_clickHandler(event:MouseEvent):void  
  14.             {  
  15.                 this.remoteObject.getName("limingnihao");  
  16.             }  
  17.               
  18.             protected function button2_clickHandler(event:MouseEvent):void  
  19.             {  
  20.                 this.remoteObject.getSqrt(5);  
  21.             }  
  22.               
  23.             protected function getStringResultHandler(event:ResultEvent):void{  
  24.                 Alert.show(event.result.toString());  
  25.             }  
  26.               
  27.             protected function getSqrtResultHandler(event:ResultEvent):void{  
  28.                 Alert.show(event.result.toString());  
  29.             }  
  30.             protected function remoteobject1_faultHandler(event:FaultEvent):void  
  31.             {  
  32.                 Alert.show(event.fault.toString());  
  33.             }  
  34.               
  35.         ]]>  
  36.     </mx:Script>  
  37.       
  38.     <mx:RemoteObject id="remoteObject" destination="flexGeneralController" fault="remoteobject1_faultHandler(event)"   
  39.                      endpoint="http://192.168.1.119:8080/SpringFlexExample_JavaService/messagebroker/amf">  
  40.         <mx:method name="getName" result="getStringResultHandler(event)"/>  
  41.         <mx:method name="getSqrt" result="getSqrtResultHandler(event)"/>  
  42.     </mx:RemoteObject>  
  43.       
  44.     <mx:Button x="37" y="64" label="按钮1" click="button1_clickHandler(event)"/>  
  45.     <mx:Button x="130" y="64" label="按钮2" click="button2_clickHandler(event)"/>  
  46.       
  47. </mx:Application>  

 

 

 

2.3消息拦截器MessageInterceptor


自定义消息拦截器,可以用于处理特殊逻辑在AMF传入传出java 表单的时候。例如,用拦截器检查传入消息的内容,或者给返回信息进行额外统一的操作。
通过实现org.springframework.flex.core.MessageInterceptor接口就可以进行自定义message拦截器。然后必须配置成Spring Bean,在用XML命名空间关联此bean。

 

如下实例:自定义message拦截器:CustomMessageInterceptor,和xml文件的配置方法。

Java代码  收藏代码
  1. package com.springFlex.example.exception;  
  2.   
  3. import org.springframework.flex.core.MessageInterceptor;  
  4. import org.springframework.flex.core.MessageProcessingContext;  
  5.   
  6. import flex.messaging.messages.Message;  
  7.   
  8. public class CustomMessageInterceptor implements MessageInterceptor {  
  9.   
  10.     public Message postProcess(MessageProcessingContext context, Message inputMessage, Message outputMessage) {  
  11.         System.out.println("CustomMessageInterceptor - postProcess");  
  12.         return outputMessage;  
  13.     }  
  14.   
  15.     public Message preProcess(MessageProcessingContext context, Message inputMessage) {  
  16.         System.out.println("CustomMessageInterceptor - preProcess");  
  17.         return inputMessage;  
  18.     }  
  19.   
  20. }  

 

需要在xml文件中添加bean,和关联bean。

Xml代码  收藏代码
  1. <bean id="customMessageInterceptor" class="com.springFlex.example.exception.CustomMessageInterceptor"/>  
  2. <flex:message-broker>  
  3.     <flex:message-interceptor ref="customMessageInterceptor"/>  
  4. </flex:message-broker>  

 

 

 

 

2.4异常转换器Exception Translators

        在服务器发生异常时,会将这个异常对象传播到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文件的配置方法。

Java代码  收藏代码
  1. package com.springFlex.example.exception;  
  2.   
  3. import org.springframework.flex.core.ExceptionTranslator;  
  4.   
  5. import flex.messaging.MessageException;  
  6.   
  7. public class CustomExceptionTranslator implements ExceptionTranslator {  
  8.   
  9.     public boolean handles(Class<?> clazz) {  
  10.         System.out.println("CustomExceptionTranslator - handles - " + clazz.getName());  
  11.         return true;  
  12.     }  
  13.   
  14.     public MessageException translate(Throwable t) {  
  15.         System.out.println("CustomExceptionTranslator - translate - " + t.getMessage());  
  16.         return new MessageException(t);  
  17.     }  
  18. }  

 

需要在xml文件中添加bean,和关联bean。

Xml代码  收藏代码
  1. <bean id="customExceptionTranslator" class="com.springFlex.example.exception.CustomExceptionTranslator"/>  
  2. <flex:message-broker>  
  3.     <flex:exception-translator ref="customExceptionTranslator"/>  
  4. </flex:message-broker>  

 

 转载:http://limingnihao.iteye.com/blog/774234

分享到:
评论
1 楼 gavin峰 2016-09-12  
挺有参考价值

相关推荐

    flex-spring blazeds integration基本框架搭建记录

    NULL 博文链接:https://chenhuiggggg.iteye.com/blog/1994009

    Flex+BlazeDS+Spring环境一步步搭建

    Flex+BlazeDS+Spring 软件环境配置搭建,一步步教学,逐渐搭建起项目所需要的框架

    搭建好的Flex+Spring+Hibernate初始框架

    花了好几天,中间碰到了很多包冲突的问题。数据库是用MySQL,就做了个登录的功能。表结构可以自己看Account.hbm.xml映射文件。 Flex的版本是4.5 Spring的3.0 Hibernate3.3开发环境MyEclipse8.6.

    hibernate3.2+spring2.5+flex3.0整合框架

    hibernate3.2+spring2.5+flex3.0整合框架,自己搭建的,可供学习之用,该框架的搭建环境是在myeclipse6.5下,还有就是因为上传文件的大不限制,只好分两部分下,请见谅!

    Flex SSH 框架整合应用

    讲解Flex+struts+spring+hibernate框架的搭建,其实是否使用struts得看工程的实际情况。Flex和struts都属于视图层,若整个项目都是使用flex做也没...这里,我们先将框架搭建起来,以后是否使用struts就看情况而定了。

    hibernate3.2+spring2.5+flex3.0整合框架2

    hibernate3.2+spring2.5+flex3.0整合框架,自己搭建的,可供学习之用,该框架的搭建环境是在myeclipse6.5下,还有就是因为上传文件的大不限制,只好分两部分下,请见谅!

    Flex_Struts2_Spring_Hibernate_Mysql_Login(annotation方式)

    多框架搭建系统平台(采用annotation方式): Flex+Blazeds+Spring+Hibernate(Flex调用java查询后台数据) JSP+Struts+spring+Hibernate(完成用户登录) 共同搭建系统

    Flex pureMVC blazeDS j2ee Spring3.0+Hibernate3.0

    运用flex pureMVC框架做页面构造,通过blazeDS连接flex,j2ee,后台搭建Spring3.0+Hibernate3.0作为基本框架。

    Flex教程(整合Flex+BlazeDS+Spring+iBatis+Cairngorm+pureMVC).doc

    分步骤搭建整合流行开发框架 整合了Flex+BlazeDS+Spring+iBatis+Cairngorm+pureMVC 迅速进入开发环境

    cfw-ext - 通用信息系统框架ExtJs版

    通用信息系统框架诞生的目的,是帮助企业开发信息系统之初快速搭建起系统基本框架,... 通用框架(包括权限管理、功能导航),采用两种模式,一是集成Flex+Spring+ibatis开源框架,二是集成Extjs+Spring+ibatis框架。

    跟我一步步搭建+PureMVC+Flex+BlazeDS+Spring+Hibernate

    增加文件/WebRoot/WEB-INF/log4j.dtd,以支持log4j.xml。本文件拷贝自log4框架j。代码如下: 修改配置文件/WebRoot/WEB-INF/web.xml,以配置proxool和log4j。代码如下:

    java代码自动生成器(根据数据库生成数据库操作代码)

    是一个以spring为核心的项目脚手架(或者称为胶水框架),框架将各个零散的框架(struts,strust2,springmvc,hibernate,ibatis,spring_jdbc,flex)搭建好,并内置一个代码生成器,辅助项目开发,可以生成java的hibernat ...

    好用的代码生成源码

    rapid-framework是一个以spring为核心的项目脚手架(或者称为胶水框架),框架将各个零散的框架(struts,strust2,springmvc,hibernate,ibatis,spring_jdbc,flex)搭建好,并内置一个代码生成器,辅助项目开发,可以生成...

    博客管理系统 综合课程设计

    1.4.2 Flex 6 1.4.3 Spring 8 1.4.4 Hibernate 9 1.4.5 MySQL 9 1.4.6 MVC 10 2 系统分析 12 2.1 系统目标 12 2.2 系统概述及功能需求分析 12 2.2.1 系统的功能划分 12 2.2.2 系统功能描述 13 2.2.3 业务图流程分析 ...

    asp.net知识库

    Microsoft .NET策略及框架概述 卸载Class? Web Form 窗体 如何实现web页面的提示保存功能 在ASP.Net中两种利用CSS实现多界面的方法 如何在客户端调用服务端代码 页面一postback,它就显示页面的最顶端,怎样让它定位...

Global site tag (gtag.js) - Google Analytics