springMVC与flex 整合

来源:互联网 发布:招行信用卡 知乎 编辑:程序博客网 时间:2024/06/14 14:33
由于最近新做的项目里有用到flex做图形展示,而之前的项目都是用springMVC搭的框架,而spring有支持flex的jar包,于是就想搭这个环境,由于网上关于spring与flex搭配环境的文章太少,英文原文档又看不懂,结果花了一天时间,终于搞定。在这里记录下新手遇到的错误及解决方法。

spring  jar包: spring-3.2,flex用的是:blazeds-turnkey-4.0.1;

第一步,配置springMVC

web.xml的其他配置的spring信息就不贴了,在这只贴了新手在做flex时疑惑的代码

<servlet><description>spring mvc servlet</description><servlet-name>springMvc</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><description>spring mvc 配置文件</description><param-name>contextConfigLocation</param-name><param-value>classpath:applicationContext-mvc.xml</param-value></init-param><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>springMvc</servlet-name><url-pattern>*.htm</url-pattern></servlet-mapping>


这里我是手动指定了mvc的配置文件.

其他的application配置文件我就不贴了。

后台测试的java代码:

@Controller@RequestMapping("/general")public class GeneralController {@RequestMapping(params="index")public String index(){System.out.println("index");return "index";}}

这里我是用annotation方式配置,因为后面有个错误会用户,所以贴出来

到这里,springMVC的配置没有任何错误或异常。

在所以springMVC框架配置好之后,我们在访问http://127.0.0.1:8080/springFlex/general?index时是会跳转到index.jsp页面去的。


第二步配置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

在原有的基础配置信息不变下,加入代码:

<servlet-mapping>     <servlet-name>springMvc</servlet-name>     <url-pattern>/messagebroker/*</url-pattern>  </servlet-mapping>

而网上的文章里却直接将   *.htm的servlet-mapping的配置给去掉了,那样的话之前配置的MVC且不是不用了?

3.配置spring的application-mvc.xml文件

在配置该文件之前贴下我将需要用到的测试后台类代码:

@Controller("flexGeneralController")@RemotingDestination(value="flexGeneralController",channels="my-amf")public class FlexGeneralController {@RemotingIncludepublic String getName(){return "hello";}}

按照网上所言,用@RemotingDestination注解,这样不用去配置文件里设置

再按照网上所说,配置application-mvc.xml文件

<flex:message-broker/>

当然,头部要加上flex的xsd。这个可以去samples-spring里的flex-servlet.xml文件里去复制。

按照网上所言,spring配置文件及web.xml都已经配置完成,可是我们现在再去测试http://127.0.0.1:8080/springFlex/general?index时,却提示404错误,再没配置之前flex之前都是正确的,于是我又逆向测试,发现当我删除<flex:message-broker/>时,访问是没问题的,于是debug进入spring源码,发现当我们加入它时,handlerMapping里就只有simpleUrlHandlerMapping,而这个handlerMapping是去不到我们所注册的bean的,去掉的它的话,就有spring默认的BeanNameUrlHandlerMapping与DefaultAnnotationHandlerMapping,网上找了些关于spring handlerMapping发现,当系统没有配置handlerMapping时,会自动加上后面两个handlerMapping,而flex:message-broker 标签是会默认加上simpleUrlHandlerMapping,如果我们要将flex与springMVC一同使用,则还需要注册BeanNameUrlHandlerMapping与DefaultAnnotationHandlerMapping的bean:

<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/><bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"/><flex:message-broker/>

加了这个之后,再去测试http://127.0.0.1:8080/springFlex/general?index,页面正常显示,一起ok。

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





0 0
原创粉丝点击