这是一个异常繁琐的整合过程,不过没有办法了.在各位看这文章之前,有一点需要声明的,在这,还有一个问题还未解决.就是struts的跳转问题.我暂时还未找到他们4个哥们结合后跳转的方法.但未免日后忘记.这里先记下.
1.SSH2的配置就不多说了吧?先配置好这3个哥们.
2.建立一个新的flex project,记得要是web application哦...不要设置他的server.还有output folder要设置到SSH的那里.方便SWF的输出嘛,不然手动很麻烦.
3.BlzeDS,暂时不讲配置文件怎么写,先把它要的工具都装上.都按照网上说的.download那个blazeds.war.解压,将其中的lib全部copy到SSH2的LIB中; 还有那个WAR里面的WEB-INF/flex/下的所有东西.都得赋值到SSH2的相对目录下(不明白?等等有图片给你看看)
4,我的目录如下
5.以上乱七八糟的就不用看了...注意web-inf/flex,这个里面的文件很重要,配置blazeds服务用的.记得哦!
6.好戏登场,web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<display-name>Struts2</display-name>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:applicationContext*.xml</param-value>
</context-param>
<context-param>
<param-name>flex.class.path</param-name>
<param-value>/WEB-INF/flex/hotfixes,/WEB-INF/flex/jars</param-value>
</context-param>
<!-- BlazeDS 服务配置 start -->
<!-- Http Flex Session attribute and binding listener support -->
<listener>
<listener-class>flex.messaging.HttpFlexSession</listener-class>
</listener>
<!-- MessageBroker Servlet -->
<servlet>
<servlet-name>MessageBrokerServlet</servlet-name>
<servlet-class>flex.messaging.MessageBrokerServlet</servlet-class>
<init-param>
<param-name>services.configuration.file</param-name>
<param-value>/WEB-INF/flex/services-config.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>MessageBrokerServlet</servlet-name>
<url-pattern>/messagebroker/*</url-pattern>
</servlet-mapping>
<!-- BlazeDS 服务配置 end -->
<!-- spring2.5自动管理session的关闭.需要放在struts2.1.6的FilterDispatcher之前 Start-->
<filter>
<filter-name>hibernateFilter</filter-name>
<filter-class>
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>hibernateFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- spring2.5自动管理session的关闭.需要放在struts2.1.6的FilterDispatcher之前 END-->
<!-- spring2.5编码过滤器 START -->
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>
org.springframework.web.filter.CharacterEncodingFilter
</filter-class>
<init-param>
<param-name>encodingFilter</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<!-- spring2.5编码过滤器 END -->
<!-- struts2.1.6 FilterDispatcher START -->
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/s2/*</url-pattern>
</filter-mapping>
<filter>
<filter-name>struts-cleanup</filter-name>
<filter-class>org.apache.struts2.dispatcher.ActionContextCleanUp</filter-class>
</filter>
<filter-mapping>
<filter-name>struts-cleanup</filter-name>
<url-pattern>/s2/*</url-pattern>
</filter-mapping>
<!-- struts2.1.6 FilterDispatcher END -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<listener>
<listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
</listener>
<welcome-file-list>
<welcome-file>/flex/index.swf</welcome-file>
</welcome-file-list>
<!-- Global Exception settings 公共异常页面配置 -->
<error-page>
<error-code>404</error-code>
<location>
/test/exception.jsp
</location>
</error-page>
</web-app>
长是长了点,但无办法啊.而且我也红色高亮注释给你了...我手写的.有误请纠正.
OK,配置完成咯.在这里会有几个疑惑的:
1.为什么<welcome-file>/flex/index.swf</welcome-file>?
其实FLEX会伴随生成HTML的,写入绝对路径访问HTML.是正常的,但要在欢迎页面里用FLEX生成的HTML是会出现JS错误的.不要问我,我没有仔细看.但用index对应的SWF文件是一样的,功能也一样.
2.为什么我的struts2的filter mapping要写成 /s2/* ??
因为struts2该死地把FLEX的请求频道地址都给拦截了.也就是
<servlet-mapping>
<servlet-name>MessageBrokerServlet</servlet-name>
<url-pattern>/messagebroker/*</url-pattern>
</servlet-mapping>
根据就近原则,我试过把它写到struts2之后.也是无用,不过写在struts2的前面就已经是就近原则了.所以我只好改变了struts2的监听路径.但我看过一个达人的BLOG里,struts2的监听路径都没有改变就是 /* ,我不知道他是怎么用的,我也很想知道,可惜联络不到他本人.可能云游去了.
3.究竟他们怎么交互啊?
重点了.不过我不打算详细说,FLEX我是用remotingObject的,而因为改变了struts2的监听路径,所以FLEX请求那个ACTION时,这个ACTION已经脱离了struts2的管理.所以随便返回STRING吧.不怕担心跳转了!开心啊!
但..........我要跳转页面怎么跳转啊?!哭啊.....这我会在之后再研究...(忘记说了,我是用JSON格式交互的,这很重要哦.)
如果有什么缺少或疑问,请留言给我.将在第二篇补完,有误请纠正留言,谢谢.