由于最近新做的项目里有用到flex做图形展示,而之前的项目都是用springMVC搭的框架,而spring有支持flex的jar包,于是就想搭这个环境,由于网上关于spring与flex搭配环境的文章太少,英文原文档又看不懂,结果花了一天时间,终于搞定。在这里记录下新手遇到的错误及解决方法。
spring jar包: spring-3.2,flex用的是:blazeds-turnkey-4.0.1;
第一步,配置springMVC
web.xml的其他配置的spring信息就不贴了,在这只贴了新手在做flex时疑惑的代码
spring mvc servlet
springMvc
org.springframework.web.servlet.DispatcherServlet
spring mvc 配置文件
contextConfigLocation
classpath:applicationContext-mvc.xml
1
springMvc
*.htm
这里我是手动指定了mvc的配置文件.
其他的application配置文件我就不贴了。
后台测试的java代码:
@Controller
@RequestMapping("/general")
public class GeneralController {
@RequestMapping(params="index")
public String index(){
System.out.println("index");
return "index";
}
}
这里我是用annotation方式配置,因为后面有个错误会用户,所以贴出来
到这里,springMVC的配置没有任何错误或异常。
第二步配置flex:
1.首先我们导入flex需要的配置文件及jar包。找到:blazeds-turnkey-4.0.1.zip,解压之后,里面的tomcat的webapps里会有几个项目文件,其中有两个是关于与spring整合的实例代码:samples-spring与blazeds-spring,在这里新手需要特别注意, 若取samples-spring里的配置文件,里面要用到spring-security框架,对应不了解该框架或不需要用该框架的千万别获取它的services-config.xml文件,否则会很头痛。我们将blazeds-spring\WEB-INF\flex里的xml文件去不复制到自己项目下的WEB-INF\flex文件夹下,然后再去samples-spring\WEB-INF\lib文件夹中取出相应的jar包,由于我们项目的spring框架已经搭建了,所以不用再去里面的spring相应的jar包,但要找到里面的org.springframework.flex-1.X.X的jar包,以及flex-messaging-XXX.jar、backport-util-concurrent-XX.jar
commons-XXXX.jar。将他们复制到自己项目的lib文件夹下。
2.配置web.xml
在原有的基础配置信息不变下,加入代码:
springMvc
/messagebroker/*
而网上的文章里却直接将 *.htm的servlet-mapping的配置给去掉了,那样的话之前配置的MVC且不是不用了?
3.配置spring的application-mvc.xml文件
在配置该文件之前贴下我将需要用到的测试后台类代码:
@Controller("flexGeneralController")
@RemotingDestination(value="flexGeneralController",channels="my-amf")
public class FlexGeneralController {
@RemotingInclude
public String getName(){
return "hello";
}
}
按照网上所言,用@RemotingDestination注解,这样不用去配置文件里设置
再按照网上所说,配置application-mvc.xml文件
当然,头部要加上flex的xsd。这个可以去samples-spring里的flex-servlet.xml文件里去复制。
按照网上所言,spring配置文件及web.xml都已经配置完成,可是我们现在再去测试http://127.0.0.1:8080/springFlex/general?index时,却提示404错误,再没配置之前flex之前都是正确的,于是我又逆向测试,发现当我删除时,访问是没问题的,于是debug进入spring源码,发现当我们加入它时,handlerMapping里就只有simpleUrlHandlerMapping,而这个handlerMapping是去不到我们所注册的bean的,去掉的它的话,就有spring默认的BeanNameUrlHandlerMapping与DefaultAnnotationHandlerMapping,网上找了些关于spring
handlerMapping发现,当系统没有配置handlerMapping时,会自动加上后面两个handlerMapping,而flex:message-broker 标签是会默认加上simpleUrlHandlerMapping,如果我们要将flex与springMVC一同使用,则还需要注册BeanNameUrlHandlerMapping与DefaultAnnotationHandlerMapping的bean:
4.调试flex客户端程序
与普通的RemoteObject一样,destination取的是@RemotingDestination注解的名称flexGeneralController,不同的是需要添加endpoint属性:内容信息取flex里的services-config.xml中my-amf的endpoint标签里的url定义,将里面的服务名、端口、项目名称换成对应的测试内容就可以了
在此,全部配置完毕,里面容易出现异常的 是:
第一个:web.xml里配置servlet-mapping不能将MVC的配置去掉,且不用再加上flex测试项目中的flex-servlet.xml文件,因为我们已经自己指定了mvc的配置文件;
第二个也是网上很少提及的配置HandlerMapping的问题
第三个则是客户端 endpoint不要写错,否则访问会是404错误
项目工程也已经上传:springFlex