- 浏览: 188425 次
- 性别:
- 来自: 武汉
文章分类
- 全部博客 (99)
- IT生活 (9)
- Oracle (3)
- java模式 (0)
- j2se (9)
- uml (0)
- javabean (3)
- 网络 (3)
- java 并发 (2)
- java xml (4)
- POI (1)
- jbpm (2)
- apache httpclient (1)
- tomcat (5)
- ssh2 错误 (2)
- mina_xsocket (0)
- struts2 (1)
- easymock (2)
- tomcat远程调试和加入JMS (1)
- eclipse_C/C++ (1)
- 数据结构 (1)
- spring (3)
- 工作记录 (6)
- 学习英语 (1)
- flex4_flexViewer_arcgis (4)
- esb (0)
- java多线程 (3)
- jvm_并发编程 (1)
- 流程 (1)
- 测试 (1)
- terracotta集群 (3)
- jvm_调优_gc_监控命令 (11)
- IT _视频 (1)
- log4jUtil (2)
- jrebel使用 (1)
- lucene-solr (3)
- linux_centos (4)
- hadoop (3)
- 集群部署 (1)
最新评论
-
叮咚可乐名:
Java并发编程和高并发解决方案视频课程网盘地址:https: ...
java处理高并发高负载类网站的优化方法 . -
q8txy8q:
非常不错,thanks.
推荐一些JVM原理,JVM调优,JVM内存模型,JAVA并发 电子书1 -
maimode:
好东西,非常实用
java操作XML文件 dom 篇 -
junJZ_2008:
嗯,就应该这样,常言道:好记性,不如乱笔头~!现在不知道是年纪 ...
第一次写博客
flex+blazeds+调用Java
本文讲解flex 怎么去调用 java 代码,这使我折腾了大半天,主要在一个问题上 。
关于blazeds 的讲解,去网上搜一下,一大把对它的解释,在此不做介绍。
1.首先下载 blazeds.war ,在下面提供下载 ,解压把它下面的WEB-INF\lib下所有的.jar copy 到你的flex web项目下WEB-INF 中的lib 中 。
2. 把 blazed 下的WEB-INF\flex ,这个文件夹连同所有的文件都copy到你的项目下的WEB-INF中。
3. 把 blazed 下的 WEB-INF\web.xml 中的配置copy 到你的项目中的web.xml 中去 。
我的web.xml如下
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<!-- 必须修改,最好与项目同名 -->
<display-name>flexTest005</display-name>
<description>BlazeDS Application</description>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/conf/spring.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- Spring 刷新Introspector防止内存泄露 -->
<listener>
<listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>
</listener>
<servlet>
<servlet-name>DruidStatView</servlet-name>
<servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>DruidStatView</servlet-name>
<url-pattern>/durid/*</url-pattern>
</servlet-mapping>
<!-- 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>
<!-- INIT -->
<servlet>
<servlet-name>InitSpring</servlet-name>
<servlet-class>oss.com.ressapp.spring.servlet.InitSpringServlet</servlet-class>
<load-on-startup>10</load-on-startup>
</servlet>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
</web-app>
4. 在此要注意一个问题,如果是flex 的web项目的话,在新建flex web 项目时,最好把输出文件夹改为你WEB的根目录下,如WEBROOT , WebContent 当打成一个war包中,它就在根目录下,如果你用WEBROOT\flexview 或 WEBContent\... , 也就是在Web根目录下加了一个子目录的话,后面调用java 会报错,即使改了service-config.xml 后,也还会报错。 如果刚开始建错了,后面也可以改,在项目上右键属性中也可以改的,如图: 4,在上图中编译时,如果把找不到ViewString,则需加入参数,如图: 参数为: -locale zh_CN -source-path=locale/{locale} -keep-all-type-selectors=true
5, 现在可以写一个java类了: 说明,这个类不受spring管理了, 如何得到spring中受管理的类,就要自已写一个Servlet 把servletContext 传给 WebApplicationContextUtils ,从而得到ApplicationContext, 再去得spring中受管理的类: Servlet如: BeanUtil如: 然后在Spring 中注册,在你需要的地方通过以下去得到spring的受管类: private TestService ts = BeanUtil.getBeanByClassName("tservice" , TestService.class) ;package oss.com.flex.action;
import oss.com.ressapp.spring.util.BeanUtil;
/**
* 相当于请求的Controller ,这个是不受spring 管理,事务都要配在service 层中即可
* @author lihc
*
*/
public class FlexJavaAction {
/**
* 每个被flex 调用的类,必须要一个无参的构造方法或不写造构方法
*/
public FlexJavaAction()
{
}
// 得到service
private TestService ts = BeanUtil.getBeanByClassName("tservice" , TestService.class) ;
public String getTest1(String str)
{
System.out.println(" FlexJavaAction test1 : " + str );
return ts.getString(str) ;
}
}
package oss.com.ressapp.spring.servlet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import oss.com.ressapp.spring.util.BeanUtil;
import oss.com.ressapp.spring.util.SpringDictionary;
public class InitSpringServlet extends HttpServlet {
/**
*
*/
private static final long serialVersionUID = 1L;
public void init() throws ServletException {
SpringDictionary.GLOBAL_REALPATH = this.getServletContext().getRealPath("/");
BeanUtil.servletContext = this.getServletContext();
System.out.println("Init Spring Start!");
System.out.println("servletContext is : " + BeanUtil.servletContext);
BeanUtil.initSpring();
System.out.println("Init Spring OK!");
}
}
package oss.com.ressapp.spring.util;
import javax.servlet.ServletContext;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;
public class BeanUtil {
private static final Log log = LogFactory.getLog(BeanUtil.class);
public static ServletContext servletContext;
private static ApplicationContext applicationContext = null;
public static void initSpring(){
applicationContext = WebApplicationContextUtils.getWebApplicationContext(servletContext);
}
public static Object getBeanByClassName(String _className) {
if(applicationContext==null ){
log.debug("ctx is null");
initSpring();
}
String lowclassName = _className.substring(0, 1).toLowerCase() + _className.substring(1, _className.length());
log.info("get IoC ClassName: " + lowclassName);
return applicationContext.getBean(lowclassName);
}
public static <T> T getBeanByClassName(String _className, Class<T> claz)
{
if(applicationContext==null ){
log.debug("ctx is null");
initSpring();
}
log.info("get IoC ClassName: " + _className);
return applicationContext.getBean(_className, claz) ;
}
}
6. 以上是Java这一侧写完了,再写Flex ,在写在,先把上面写的flexjavaAction,注册到 blazds中,才能让flex 通过它去调用java
在文件:WEB-INF\flex\remoting-config.xml 中,注册为:
7. 再写一个flex 主页面来测试: <destination id="flexJavaAction">
<properties>
<source>oss.com.flex.action.FlexJavaAction</source>
</properties>
</destination>
<?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" xmlns:supportClasses="com.esri.ags.skins.supportClasses.*" minWidth="955" minHeight="600" initialize="init()"> <fx:Script> <![CDATA[ import mx.controls.Alert; import mx.rpc.AbstractOperation; import mx.rpc.events.ResultEvent; import mx.rpc.remoting.RemoteObject; import org.com.oss.flex.util.UtilCommon; private var ro_:RemoteObject ; private function init():void { Alert.show("init..."); } private function onCallJavaPro():void { ro_ = UtilCommon.getServerAction("flexJavaAction"); var abstractOperation : AbstractOperation = ro_.getOperation("getTest1") ; abstractOperation.addEventListener(ResultEvent.RESULT, getResultHandle); ro_.getTest1("flex call "); // 调用方法,或以传入参数 } private function getResultHandle(evt:ResultEvent):void { //Alert.show("evt is : " + evt ); var result :String = evt.result as String ; Alert.show("result is : " + result ) ; } ]]> </fx:Script> <mx:ViewStack width="100%" height="100%"> <mx:HBox width="100%"> <s:Button label="flex调用java程序" width="60" click="onCallJavaPro()"/> </mx:HBox> </mx:ViewStack> </s:Application>
在这里,可以通过<s:RemoteObject /> 去调用,但我习惯写个方法,用as 脚本去调用,主要为:
8 ,写完,启动tomcat就可以了调用了。 9, 如果你没成功,会得到以下错误提示, 这样,你就要去,检查web.xml ,检查blazed的包是否加入,最后重点看下上面这个请求的地址,它是要在从web的根目录起的,所以你所有的flex编译输出文件必须为WEB的根目录:这个只是从界面上报的,后台没有报错。 在调试时,在后面会得到: 警告: 等待 socket 策略文件时在 xmlsocket://localhost:27813 上超时(3 秒钟)。这不会造成任何问题,但可访问 http://www.adobe.com/go/strict_policy_files_cn 以获得说明。 错误: 来自 http://localhost:8080/flexTest005/flexviewer/flexjavaTest.swf 的 SWF 不能不使用策略文件便连接到自己的域中的 socket。请访问 http://www.adobe.com/go/strict_policy_files_cn 以解决此问题。 *** 安全沙箱冲突 *** 如这样的信息, 和上面一样去检查。 10 .本人也试去修改service-config.xml 下的请求地址,也不起作用,此文件中内容为: 它有很多的endpoint <endpoint url=http://{server.name}:{server.port}/{context.root}/messagebroker/http
ro_ = UtilCommon.getServerAction("flexJavaAction");
var abstractOperation : AbstractOperation = ro_.getOperation("getTest1") ;
abstractOperation.addEventListener(ResultEvent.RESULT, getResultHandle);
ro_.getTest1("flex call "); // 调用方法,或以传入参数
public static function getServerAction(_destination : String):RemoteObject {
var ro:RemoteObject;
ro = new RemoteObject();
ro.destination = _destination;
ro.endpoint = "messagebroker/amf";
ro.addEventListener( FaultEvent.FAULT, doFaultHandle );
return ro;
}
private static function doFaultHandle(event:FaultEvent):void {
Alert.show(event.fault.toString());
trace(event.message);
}
到 localhost:27813 的连接已停止 - 不允许从 http://localhost:8080/flexTest005/flexviewer/flexjavaTest.swf 进行连接<?xml version="1.0" encoding="UTF-8"?>
<services-config>
<services>
<service-include file-path="remoting-config.xml" />
<service-include file-path="proxy-config.xml" />
<service-include file-path="messaging-config.xml" />
</services>
<security>
<login-command class="flex.messaging.security.TomcatLoginCommand" server="Tomcat"/>
<!-- Uncomment the correct app server
<login-command class="flex.messaging.security.TomcatLoginCommand" server="JBoss">
<login-command class="flex.messaging.security.JRunLoginCommand" server="JRun"/>
<login-command class="flex.messaging.security.WeblogicLoginCommand" server="Weblogic"/>
<login-command class="flex.messaging.security.WebSphereLoginCommand" server="WebSphere"/>
-->
<!--
<security-constraint id="basic-read-access">
<auth-method>Basic</auth-method>
<roles>
<role>guests</role>
<role>accountants</role>
<role>employees</role>
<role>managers</role>
</roles>
</security-constraint>
-->
</security>
<channels>
<channel-definition id="my-amf" class="mx.messaging.channels.AMFChannel">
<endpoint url="http://{server.name}:{server.port}/{context.root}/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}/{context.root}/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}/{context.root}/messagebroker/amfpolling" class="flex.messaging.endpoints.AMFEndpoint"/>
<properties>
<polling-enabled>true</polling-enabled>
<polling-interval-seconds>4</polling-interval-seconds>
</properties>
</channel-definition>
<!--
<channel-definition id="my-http" class="mx.messaging.channels.HTTPChannel">
<endpoint url="http://{server.name}:{server.port}/{context.root}/messagebroker/http" class="flex.messaging.endpoints.HTTPEndpoint"/>
</channel-definition>
<channel-definition id="my-secure-http" class="mx.messaging.channels.SecureHTTPChannel">
<endpoint url="https://{server.name}:{server.port}/{context.root}/messagebroker/httpsecure" class="flex.messaging.endpoints.SecureHTTPEndpoint"/>
<properties>
<add-no-cache-headers>false</add-no-cache-headers>
</properties>
</channel-definition>
-->
</channels>
<logging>
<target class="flex.messaging.log.ConsoleTarget" level="Error">
<properties>
<prefix>[BlazeDS] </prefix>
<includeDate>false</includeDate>
<includeTime>false</includeTime>
<includeLevel>false</includeLevel>
<includeCategory>false</includeCategory>
</properties>
<filters>
<pattern>Endpoint.*</pattern>
<pattern>Service.*</pattern>
<pattern>Configuration</pattern>
</filters>
</target>
</logging>
<system>
<redeploy>
<enabled>false</enabled>
<!--
<watch-interval>20</watch-interval>
<watch-file>{context.root}/WEB-INF/flex/services-config.xml</watch-file>
<watch-file>{context.root}/WEB-INF/flex/proxy-config.xml</watch-file>
<watch-file>{context.root}/WEB-INF/flex/remoting-config.xml</watch-file>
<watch-file>{context.root}/WEB-INF/flex/messaging-config.xml</watch-file>
<watch-file>{context.root}/WEB-INF/flex/data-management-config.xml</watch-file>
<touch-file>{context.root}/WEB-INF/web.xml</touch-file>
-->
</redeploy>
</system>
</services-config>
我在{context.roog}/flexview/messagebooker/http....
也调用不到。
本人也没查找这些 {server.port} {context.root } 是从哪里来的,但在配web.xml中有一个flex.messaging.MessageBrokerServlet ,猜想是从这里来的吧,如有知道的请告知下。
11,通上blazed方法调用,还有别的方式去调用java,如webservice,自已写socket,等,以后有时间再研究下。继续学习中 。
相关推荐
BlazeDS 是一款开源的服务器端技术,由 Adobe 提供,主要用于实现 Java 应用程序与 Flex 客户端之间的...通过上述步骤,开发者可以建立一个基础的 Flex+Java+BlazeDS 开发环境,从而开始构建富互联网应用程序(RIA)。
BlazeDS是Adobe提供的一个免费服务器端技术,它为Flex客户端提供了与Java应用程序交互的能力,包括实时消息传递、Remoting和数据推送等功能。Spring是一个广泛使用的Java企业级应用开发框架,它简化了Java应用程序的...
- 在这个整合中,BlazeDS作为Flex和Spring之间的数据传输桥梁,允许Flex应用调用Spring服务。 4. **Spring**: - Spring是一个广泛使用的Java企业级应用框架,提供了依赖注入、AOP(面向切面编程)、MVC框架等...
总之,这个“Flex+blazeds+java企业门户网站完整源码”是一个很好的学习资源,可以帮助开发者掌握如何利用Flex构建富用户体验的Web应用,并通过BlazeDS实现与Java后端的有效交互,进而构建高效、功能强大的企业级...
2. **远程服务调用**:通过AMF,Flex客户端可以透明地调用Java后端的业务逻辑,简化了前后端交互。 3. **数据交换效率**:AMF是一种二进制格式,相比JSON或XML,数据传输更高效,减少了网络延迟。 4. **组件重用**...
5. **BlazeDS数据交换**:在Flex客户端,使用RemoteObject或WebService组件来调用Java服务的分页方法。当用户改变分页设置时,发送请求到服务器,获取相应页的数据并更新UI。 6. **事件监听和处理**:在Flex中添加...
总结来说,Flex+BlazeDS+Java通信的核心在于BlazeDS作为桥梁,使得Flex的前端可以便捷地调用Java后端的服务,实现数据的双向传输,从而创建出具有实时交互特性的ria应用。而`PushTest6`的源代码则可以作为学习和理解...
Java、Flex和BlazeDS是开发富互联网应用程序(RIA)时常用的一组技术组合。Java在后端提供数据处理和业务逻辑,而Flex作为前端UI框架...解压并研究这些文件,将有助于你更好地理解和实践Java+Flex+BlazeDS的整合开发。
在Flex客户端,使用AMF通道调用Java服务。在ActionScript代码中,我们需要导入`flex.messaging.Message`和`flex.messaging.endpoints.AMF`,然后发送一个消息请求。 ```actionscript private function ...
在Flex客户端,使用`RemoteObject`组件来连接到BlazeDS并调用Java服务。通过事件监听器,我们可以接收到服务端返回的数据,并在界面上进行展示。 8. **调试和测试**: 为了确保应用正常工作,我们需要在服务器和...
BlazeDS通过服务暴露这些Java方法,使得Flex客户端可以通过AMF调用它们。这一步骤对于理解客户端和服务器之间的数据交换至关重要。 数据绑定是Flex的一个强大特性,它允许你将UI组件直接连接到应用程序的数据模型。...
`remotingSayHello`函数中,通过`say.getHelloWorld`调用Java服务,并将返回结果绑定到标签上显示。 完成以上步骤后,你就成功地配置了一个使用Flex、Java和BlazeDS的Web应用,可以实现客户端和服务器之间的数据...
MyEclipse 是一个强大的集成开发环境(IDE),特别适合于 Java 开发,而 Flex 是一种用于创建交互式用户界面的开源框架,BlazeDs 则是 Adobe 推出的服务器端数据服务组件,用于实现在 Flex 客户端和 Java 应用服务器...
- 建立通信:在Flex客户端使用ActionScript调用Java服务,通过AMF传递数据。 - 显示数据:将服务器返回的数据绑定到Flex UI组件上,实现交互式展示。 5. **源代码分析**:`flexDemo`这个文件名可能代表了完整的...
BlazeDS允许Flex客户端与Java服务器进行实时的双向通信,支持发布Java服务为Remoting Destination,使得Flex应用可以调用Java方法,以及订阅Java推送的数据。 在"firstdome"这个实例中,可能包含了使用Flex、Java和...
根据提供的文件信息,本文将详细介绍如何一步步搭建PureMVC+Flex+BlazeDS+Spring+Hibernate的技术栈。这个过程涉及到了多个技术领域的整合,包括前端的Flex开发、后端的Java开发以及数据库交互等多个方面。 ### 一...
BlazeDS是Adobe提供的一个免费服务器端组件,它允许Flex客户端与Java后端进行双向通信,实现了轻量级的远程方法调用(RPC)以及数据推送功能。Java是一种广泛使用的面向对象的编程语言,常用于构建服务器端应用。JMS...