或者参考http://limingnihao.iteye.com/blog/830409使用Eclipse的Maven构建SpringMVC项目

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。

  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. <filter>
  8. <filter-name>CharacterEncodingFilter</filter-name>
  9. <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
  10. <init-param>
  11. <param-name>encoding</param-name>
  12. <param-value>UTF-8</param-value>
  13. </init-param>
  14. <init-param>
  15. <param-name>forceEncoding</param-name>
  16. <param-value>true</param-value>
  17. </init-param>
  18. </filter>
  19. <filter-mapping>
  20. <filter-name>CharacterEncodingFilter</filter-name>
  21. <url-pattern>/*</url-pattern>
  22. </filter-mapping>
  23. <!-- Spring view分发器 -->
  24. <servlet>
  25. <servlet-name>dispatcher</servlet-name>
  26. <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  27. <init-param>
  28. <param-name>contextConfigLocation</param-name>
  29. <param-value>/WEB-INF/dispatcher-servlet.xml</param-value>
  30. </init-param>
  31. <load-on-startup>1</load-on-startup>
  32. </servlet>
  33. <servlet-mapping>
  34. <servlet-name>dispatcher</servlet-name>
  35. <url-pattern>*.do</url-pattern>
  36. </servlet-mapping>
  37. </web-app>

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

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

1.3.5编写Controller和RequestMapping

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

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

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/*。改完效果如下实例:

  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>

2.1.3在Spring中配置MessageBroker

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

典型配置如下例子:

  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. </beans>

这使Spring BlazeDS 集成了flex命名空间,可在配置文件中使用。

        最基本的配置,需要在Spring的WebApplicationContext中声明一个MessageBrokerFactoryBean的Bean,以便将传去的请求引导到MessageBroder中,以及Spring管理MessageBroker需要的MessageBrokerHandlerAdapter和HandlerMapping(一般为SimpleUrlHandlerMapping)。

        这些bean可以使用message-broker标签来自动注册。例如最简单的方法:

  1. <flex:message-broker/>

这样设置MessageBroker和必要的基础默认配置。默认值可以被重写,配置message-broker标签的属性和他的子元素。

        例如BlazeDS XML配置文件默认位置为:/ WEB-INF/flex/services-config.xml。但可以使用services-config-path属性重新配置路径。classpath在maven项目中默认为src/main/resources路径下。

  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。如下示例:

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

也可以写成:

  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:

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

@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。

如下例子:

  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. protected function button1_clickHandler(event:MouseEvent):void
  13. {
  14. this.remoteObject.getName("limingnihao");
  15. }
  16. protected function button2_clickHandler(event:MouseEvent):void
  17. {
  18. this.remoteObject.getSqrt(5);
  19. }
  20. protected function getStringResultHandler(event:ResultEvent):void{
  21. Alert.show(event.result.toString());
  22. }
  23. protected function getSqrtResultHandler(event:ResultEvent):void{
  24. Alert.show(event.result.toString());
  25. }
  26. protected function remoteobject1_faultHandler(event:FaultEvent):void
  27. {
  28. Alert.show(event.fault.toString());
  29. }
  30. ]]>
  31. </mx:Script>
  32. <mx:RemoteObject id="remoteObject" destination="flexGeneralController" fault="remoteobject1_faultHandler(event)"
  33. endpoint="http://192.168.1.119:8080/SpringFlexExample_JavaService/messagebroker/amf">
  34. <mx:method name="getName" result="getStringResultHandler(event)"/>
  35. <mx:method name="getSqrt" result="getSqrtResultHandler(event)"/>
  36. </mx:RemoteObject>
  37. <mx:Button x="37" y="64" label="按钮1" click="button1_clickHandler(event)"/>
  38. <mx:Button x="130" y="64" label="按钮2" click="button2_clickHandler(event)"/>
  39. </mx:Application>

2.3消息拦截器MessageInterceptor

自定义消息拦截器,可以用于处理特殊逻辑在AMF传入传出java 表单的时候。例如,用拦截器检查传入消息的内容,或者给返回信息进行额外统一的操作。

通过实现org.springframework.flex.core.MessageInterceptor接口就可以进行自定义message拦截器。然后必须配置成Spring Bean,在用XML命名空间关联此bean。

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

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

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

  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文件的配置方法。

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

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

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

附件中有源代码:

SpringFlexExample_JavaService为Java项目;

SpringFlexExample_FlexClient.rar为Flex项目;

SpringFlex框架搭建的更多相关文章

  1. Angular企业级开发(5)-项目框架搭建

    1.AngularJS Seed项目目录结构 AngularJS官方网站提供了一个angular-phonecat项目,另外一个就是Angular-Seed项目.所以大多数团队会基于Angular-S ...

  2. 一步一步使用ABP框架搭建正式项目系列教程之本地化详解

    返回总目录<一步一步使用ABP框架搭建正式项目系列教程> 本篇目录 扯扯本地化 ABP中的本地化 小结 扯扯本地化 本节来说说本地化,也有叫国际化.全球化的,不管怎么个叫法,反正道理都是一 ...

  3. ABP框架搭建项目系列教程基础版完结篇

    返回总目录<一步一步使用ABP框架搭建正式项目系列教程> 经过前面十二篇的基础教程,现在终于该做个总结了. 回顾 第一篇,我们建议新手朋友们先通过ABP官网的启动模板生成解决方案,因为这样 ...

  4. 【Java EE 学习 69 中】【数据采集系统第一天】【SSH框架搭建】

    经过23天的艰苦斗争,终于搞定了数据采集系统~徐培成老师很厉害啊,明明只是用了10天就搞定的项目我却做了23天,还是模仿的...呵呵,算了,总之最后总算是完成了,现在该好好整理该项目了. 第一天的内容 ...

  5. SSH(Struts2+Spring+Hibernate)框架搭建流程<注解的方式创建Bean>

    此篇讲的是MyEclipse9工具提供的支持搭建自加包有代码也是相同:用户登录与注册的例子,表字段只有name,password. SSH,xml方式搭建文章链接地址:http://www.cnblo ...

  6. 原创:Equinox OSGi应用嵌入Jersey框架搭建REST服务

    一.环境 eclipse版本:eclipse-luna 4.4 jre版本:1.8 二.Equinox OSGi应用嵌入Jersey框架搭建REST服务 1.新建插件工程HelloWebOSGI a. ...

  7. 关于使用ABP框架搭建的项目升级时需要注意的问题汇总

    ABP理论学习总目录 一步一步使用ABP框架搭建正式项目系列教程 ABP之Module-Zero学习目录 本篇目录 说明 升级方法 问题_01:Log4Net导致编译不成功 2015/12/18更新 ...

  8. ssh框架搭建的基本步骤(以及各部分作用)

    ssh框架搭建的基本步骤(以及各部分作用)     一.首先,明确spring,struts,hibernate在环境中各自的作用.   struts: 用来响应用户的action,对应到相应的类进行 ...

  9. 淘宝(阿里百川)手机客户端开发日记第一篇 android 主框架搭建(一)

    android 主框架搭建(一) 1.开发环境:Android Studio 相继点击下一步,直接项目建立完毕(如下图) 图片看的效果如果很小,请放大您的浏览器显示百分比  转载请注明http://w ...

  10. 【PHP】基于ThinkPHP框架搭建OAuth2.0服务

    [PHP]基于ThinkPHP框架搭建OAuth2.0服务 http://leyteris.iteye.com/blog/1483403

随机推荐

  1. ptmalloc2涉及的基础知识与基本数据结构

    随笔来源:ctfwiki CSDN 本随笔只为记录分析总结的自己学习的结论,方便未来回顾,以及为他人提供一个理解的思路,不保证正确.如有谬误,请大家指出. 1.堆相关的操作 malloc:返回对应大小 ...

  2. keycloak~scope客户端模板的使用

    scope为何物? scope在oauth2中表示授权的范围,另外也可以理解为,根据认证时scope的参数,在构建jwt时,返回更多的信息:比如在keycloak中,你的可选scope(optiona ...

  3. Yarn 3.0 Plug'n'Play (PnP) 安装和迁移

    前言 以前用 npm, 后来 yarn 火了就用 yarn. 后来 yarn 2.0 大改版, Angular 不支持就一直没用. 一直到去年的 Angular 13 才开始支持. 最近又开始写 An ...

  4. TypeScript 学习笔记 – Handbook 1

    前言 一转眼, 一年多没有写 TypeScript 了. 最近又要开始写了, 乘此机会打算系统学习一下, 顺便写一个学习笔记. 我接触 TypeScript 比较早, 那是 Angular 2 bet ...

  5. Let's Encrypt Free SSL – Certify The Web

    介绍 随着 Let's Encrypt 的普及. 现在为网站升级到 HTTPS 已经不需要付费了. Let's Encrypt 的 SSL 是免费的, 每 3 个月需要更新一次. 可以完全用 API ...

  6. 2024 年 C# 高效开发:精选实用类库

    前言 在平时开发中,好的类库能帮助我们快速实现功能,C#有很多封装好的类库. 本文将介绍一些2024年特别受欢迎的C#类库,并分析各自的优点让我们编程写代码变的更轻松.更快捷. 快来看一看有没有大家常 ...

  7. mysql后台导入sql文件-设定字符集

    需求描述:有一个user_info.sql 的文件里面都是插入user_info表的insert语句数据,数据量500M,要求快速插入mysql的数据库中. 解决方法: 1.利用客户端工具加载文件插入 ...

  8. Tauri2.0+Vite5聊天室|vue3+tauri2+element-plus仿微信|tauri聊天应用

    原创tauri2.0+vue3+pinai2仿QQ/微信客户端聊天Exe程序TauriWinChat. tauri2-vue3-winchat自研vite5+tauri2.0+vue3 setup+e ...

  9. php生成验证码类

    php生成验证码类 直接看代码 <?php session_start(); class Code{ //资源 private $img; //画布宽度 private $width=100; ...

  10. 【解决方案】基于数据库驱动的自定义 TypeHandler 处理器

    目录 前言 一.TypeHandler 简介 1.1转换步骤 1.2转换规则 二.JSON 转换 三.枚举转换 四.文章小结 前言 笔者在最近的项目开发中,频繁地遇到了 Java 类型与 JDBC 类 ...