问题描述
大家好,现在接到一个任务要用flex做一个拓补图,双击节点与java通信实现动成的的拓补图。这个demo已经完成了,接下来的任务就是把这个功能放入到一个已经上线的j2ee项目里。按着我个人的理解做了如下操作(firstflex为demo项目,testjavaincludeflex为上线的j2ee项目)1.将firstflex项目中flexbuilder生成的html,swf文件拷贝到testjavaincludeflex,在testjavaincludeflex根目录下建了一个flex文件夹2.将firstflex项目中的flex的配置及jar拷贝testjavaincludeflex3.更改testjavaincludeflex中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>BlazeDS</display-name> <description>BlazeDS Application</description> <!-- 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> <display-name>MessageBrokerServlet</display-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> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list></web-app>---------------------------------------------------------------------完成以上步骤,我觉得可以访问相应的swf或htmlhttp://localhost:8080/testjavaincludeflex/flex/birdeyeTest.html报错:faultCode:Client.Error.MessageSend faultString:'Send failed' faultDetail:'Channel.Connect.Failed error NetConnection.Call.Failed: HTTP: Status 404: url: 'http://localhost:8080/firstflex/messagebroker/amf''很奇怪为什么会是去访问firstflex项目的是东西。。。。就算我把testjavaincludeflex中services-config.xml配置文件里全改成以下方式还是不行<channel-definition id="my-amf" class="mx.messaging.channels.AMFChannel"> <endpoint url="http://{server.name}:{server.port}/testjavaincludeflex/messagebroker/amf" class="flex.messaging.endpoints.AMFEndpoint"/> </channel-definition> <channel-definition id="my-secure-amf" class="mx.messaging.channels.SecureAMFChannel"> <endpoint url="https://{server.name}:{server.port}/testjavaincludeflex/messagebroker/amfsecure" class="flex.messaging.endpoints.SecureAMFEndpoint"/> <properties> <add-no-cache-headers>false</add-no-cache-headers> </properties> </channel-definition> <channel-definition id="my-polling-amf" class="mx.messaging.channels.AMFChannel"> <endpoint url="http://{server.name}:{server.port}/testjavaincludeflex/messagebroker/amfpolling" class="flex.messaging.endpo现在的我的问题,有人可以帮我解决这个问题,为什么会这样。或是讲解一下怎么一个flex集成j2ee生成的后的swf(与java有交互)文件集成到另一个j2ee项目中,谢谢 问题补充:首先非常感谢地狱牢笼的回答。已经用另一种方式解决了,之前flex与java之间的通信是采用RemoteObject方式,我猜是services-config.xml配制后,编译生成的swf文件是个不改改变的请求地址,如果需求把此swf文件移植到另一个j2ee项目中必须要在生成swf的项目将services-config.xml的配制改为需要移植项目是的配制。。。不会表达。反正我也没有去验证,后来我是改用httpserver的通信方式很好解决了上述问题。
解决方案
补充一下文件太多没细看主要问题就是services-config.xml。也就是flex和java通信,要建立通道,这个通道编译时候要用到,编译时可以在编译参数里面配置,运行时也要用到,要确保正确。你可以这样去访问http://{server.name}:{server.port}/testjavaincludeflex/messagebroker/amf看能不能访问就知道这里有没有问题。
解决方案二:
server.name和server.port改成你项目相关的对与这个问题怎么一个flex集成j2ee生成的后的swf(与java有交互)文件集成到另一个j2ee项目中:一般做法,就是直接用打包工具,直接打包,进去,如果你对ant,maven不是很熟悉可能有点痛苦。这样,flex代码不好调试,不会进断点。还有一种就是,j2ee项目不是要部署吗?flex直接编译到服务器的那个目录去。开发可以这么干。一切ok。
解决方案三:
<channel-definition id="my-amf" class="mx.messaging.channels.AMFChannel"> <endpoint url="http://{server.name}:{server.port}/testjavaincludeflex/messagebroker/amf" class="flex.messaging.endpoints.AMFEndpoint"/> </channel-definition> 该成你项目名称。