blazeds是一套面向actionscript的前后台通信框架。
在服务器端,blazeDS以servlet的方式存在于java应用服务器上。它默认提供3中服务,远程调用
(在remoting-config.xml中配置)、访问代理(proxy-config.xml)、消息服务(messaging-config.xml),同时框架允许你添加自定义的服务(在services-config.xml中配置)。
操作步骤:
1、在MyEclipse中创建一个java web工程,名称为FlexTopTest,位置是E:\newworkspace\FlexTopTest
2、下载blazeds包并进行解压,加入java web环境中
下载地址:
http://download.macromedia.com/pub/opensource/blazeds/blazeds_bin_3-0-0-544.zip
使用winRAR进行解压。
将下载的blazeds_bin_3-0-0-544.zip解压,再将解压出的blazeds.war解压缩,将里面的WEB-INF下面的文件拷贝到java web工程的WEB-INF下。
3、在java web工程中新建一个类,用于测试Flex与Java交互是否成功。
创建测试类:见HelloWorld.java,如下
package gbicc.net.blazeds.test;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServlet;
@SuppressWarnings("serial")
public class HelloWorld extends HttpServlet {
public String sayHello() {
System.out.println("Flex call java success.");
return "success";
}
public List<UserBean> getUserList() {
List<UserBean> list = new ArrayList<UserBean>();
for (int i = 0; i < 10; i++) {
UserBean user = new UserBean();
user.setUserName("用户" + i);
user.setPassword("123");
user.setAge(20 + i);
user.setEmail("user" + i + "@163.com");
list.add(user);
}
System.out.println("Flex call java success:connection success!");
return list;
}
public List<UserBean> queryConn(UserBean ub) {
List<UserBean> list = new ArrayList<UserBean>();
if(ub!=null){
String username=ub.getUserName();
int age=ub.getAge();
System.out.print("name:"+username);
System.out.println("age :"+age);
if(!"".equals(username)||age!=0){
if(!"".equals(username)){
ub.setUserName(username);
}else{
ub.setUserName("admin");
}
if(age!=0){
ub.setAge(age);
}else{
ub.setAge(10000);
}
ub.setPassword("123456");
ub.setEmail("admin@163.com");
list.add(ub);
}
else{
list=this.getUserList();
}
}
System.out.println("Flex call java success:connection success!");
return list;
}
}
和实体类:见UserBean.java,如下
package gbicc.net.blazeds.test;
import java.io.Serializable;
/**
*
* @author benjamin
* @date 2013 -8 -12
* @remark
* 由于这个实体类需要当做Java代码中方法的返回值传递给Flex中的AS代码,
* 所以需要继承Serializable接口,否则将导致异常的发生。
*/
public class UserBean implements Serializable {
private String userName;
private String password;
private int age;
private String email;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
4、在WEB-INF/flex/remoting-config.xml中添加destination节点
<destinationid="hellow">
<properties>
<!-- 这里要写完整路径:包名 + 类名 -->
<source>gbicc.net.blazeds.test.HelloWorld</source>
</properties>
</destination>
在 WEB-INF/web.xml文件中添加如下节点
<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>
5、在FlexBuilder中建立Flex工程
如下图:
6、创建一个AS的类,用来接收Java程序的返回值了,也就是那个UserBean。代码见UserBean.as,如下
package mondel
{
[Bindable]
[RemoteClass(alias="gbicc.net.blazeds.test.UserBean")]
/**
* 这里[Bindable]是可绑定的,
*[RemoteClass(alias="gbicc.net.blazeds.test.UserBean")]是和Java代码中的UserBean类关联起来。
*这样就可以利用类型转换来将Java对象转换为AS对象了。
* /
/**
* @author benjamin
* @date 2013 -8 -12
*/
public class UserBean
{
public var userName:String;
public var password:String;
public var age:int;
public var email:String;
}
}
7、编写Flex的测试代码
见:MFlex.mxml,如下
<?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"
width="517" minWidth="955" minHeight="600" creationComplete="init();">
<fx:Declarations>
<!-- 将非可视元素(例如服务、值对象)放在此处 -->
<s:RemoteObject id="helloWorld" destination="hellow" result="success(event)" fault="fault(event)"/>
</fx:Declarations>
<fx:Script>
<![CDATA[
import mondel.UserBean;
import mx.collections.ArrayCollection;
import mx.controls.Alert;
import mx.rpc.events.FaultEvent;
import mx.rpc.events.ResultEvent;
private function init():void{
helloWorld.getUserList();//为helloWorld类中的方法
}
private function success(event:ResultEvent):void{
var userList:ArrayCollection = ArrayCollection(event.result);
var userList_FlexData:ArrayCollection = new ArrayCollection();
for (var i:int = 0; i < userList.length; i++)
{
var user:UserBean = UserBean(userList.getItemAt(i));
userList_FlexData.addItem(user);
}
grid.dataProvider = userList_FlexData;
}
private function fault(event:FaultEvent):void{
Alert.show("blazeds 与java交互失败 !");
}
private function queryConnection():void
{
var un:String=username.text;
var ag:String=age.text ;
var ub:UserBean =new UserBean();
ub.userName=un;
ub.age=int(ag);
helloWorld.queryConn(ub);//为helloWorld类中的方法
}
]]>
</fx:Script>
<s:Panel x="35" y="50" width="452" height="345" title="用户列表">
<s:DataGrid x="41" y="44" width="359" textAlign="center" height="235" id="grid" requestedRowCount="4">
<s:columns>
<s:ArrayList>
<s:GridColumn dataField="userName" sortable="true" headerText="用户名"></s:GridColumn>
<s:GridColumn dataField="age" sortable="true" headerText="年 龄"></s:GridColumn>
<s:GridColumn dataField="email" headerText="email"></s:GridColumn>
</s:ArrayList>
</s:columns>
</s:DataGrid>
<s:Button x="335" y="15" width="45" label="查询" click="queryConnection()"/>
<s:TextInput x="86" y="11" id="username" width="74"/>
<s:Label x="35" y="20" text="用户名:"/>
<s:Label x="184" y="18" height="19" text="年龄:"/>
<s:TextInput x="233" y="13" id="age" width="74"/>
</s:Panel>
</s:Application>