Лого Флэша Потрошителя
 
Новости · Статьи · Прототипы · Компоненты · Персоналии · Глоссарий · Идеальный клип · Что делать  

Первые шаги в работе с ColdFusion MX и Flash Remoting

13.01.2003 04.02.2003

Автор статьи: Майк Чемберз [mesh@macromedia.com]

Технологию Flash Remoting, появившуюся не так давно, можно назвать «инструментом повышенной эффективности» для работы с ColdFusion MX. Flash Remoting позволяет легко использовать функциональность ColdFusion MX в ваших flash-приложениях, не выходя при этом за рамки привычного синтаксиса и объектной модели ActionScript. Далекое становится доступным.

Что вы узнаете из этой статьи

В этой статье по шагам описан процесс создания простого приложения на основе Macromedia Flash Remoting. Конечный .swf-файл будет использовать Flash Remoting для вызова серверного компонента ColdFusion MX (эти компоненты сокращенно называют CFC).

Для начала нужно сделать следующее

  1. Загрузить файлы для этого урока, flash_remoting.zip (35 KB)
    Создайте каталог cf_webroot\com\macromedia\test и распакуйте в него файл flash_remoting.zip. Помните: на всех шагах урока мы ссылаемся на каталог cf_webroot. Размещение cf_webroot может отличаться в зависимости от того, куда установлен сервер ColdFusion MX.
  2. Установить необходимое ПО
    Macromedia Flash MX
    Macromedia ColdFusion MX
    Компоненты Flash Remoting для Macromedia Flash MX
    Каждая их этих программ имеет бесплатные пробные версии, которыми вы и можете воспользоваться при необходимости. При установке убедитесь, что все компоненты установлены корректно.

Написание серверного скрипта

Серверный скрипт представляет собой простой компонент ColdFusion. Вы можете найти файл под названием "HelloWorld.cfc" в каталоге с распакованным zip-файлом (cf_webroot\com\macromedia\test). Имя файла HelloWorld.cfc определяет имя сервиса (название серверного процесса, при помощи которого мы обращаемся к компоненту – прим. переводчика) для компонента. В данном случае имя сервиса – это "HelloWorld". Если вы откроете файл HelloWorld.cfc в любом текстовом редакторе, вы увидите следующий код:

<cfcomponent name="HelloWorld">

<cffunction name="sayHello" access="remote">
<cfreturn "Hello World">
</cffunction>

</cfcomponent>

Как видите, простой компонент создается легко: сначала мы создаем сам компонент при помощи тега cfcomponent. Хотя этот компонент и представляет собой сервис для Macromedia Flash Remoting, сам по себе он еще ничего не делает.

Чтобы заставить этот компонент работать, добавим тег cffunction. При помощи этого тега мы добавляем к компоненту метод. Таким образом, у компонента появился метод (тег) cffunction с именем "sayHello", в который вложен тег cfreturn. Когда мы вызываем этот компонент, он возвращает строку "HelloWorld" тому приложению, которое его вызвало (URL, какая-либо служба и т.д.)

Примечание: в вашем компоненте может быть сколько угодно методов, в данном примере в нашем компоненте один метод "sayHello".

Обратите внимание, что атрибут access внутри тега cffunction имеет значение "remote". Этот атрибут необходим, если вы хотите предоставить вашим flash-клипам (или другим удалённым службам) доступ к методам компонента. Собственно, это всё, что нужно для создания компонента. Помните о пути к файлу:

cf_webroot\com\macromedia\test\HelloWorld.cfc

Почему необходимо размещать файл в этом каталоге?
Компоненты вызываются не только по их имени, для этого также используется путь к ним (в данном случае это cf_webroot\com\macromedia\test\). Размещая компонент в директории com\macromedia\test, мы получаем:

  1. Уверенность в том, что другой разработчик из вашей команды не перепишет ваш компонент "HelloWorld" другим компонентом с именем "HelloWorld".
  2. Наиболее предпочтительный способ организации компонентов.

Вы, наверное, заметили, что com\macromedia — это всего лишь обращенная строка macromedia.com. Используйте для своих компонентов свои доменные имена, например, net/foo для foo.net.

Теперь мы могли бы приступить к созданию flash-клипа для доступа к компоненту, но сначала давайте создадим простую страницу для проверки работы компонента. Это облегчит отладку, если позже у нас возникнут проблемы при работе компонента с flash-клипом.

В директории cf_webroot\com\macromedia\test\ находится файл test.cfm со следующим кодом:

<cfoutput>
<cfinvoke
component="com.macromedia.test.HelloWorld"
method="sayHello"
returnVariable="message"
/>
#message#
</cfoutput>

Файл test.cfm использует тег cfinvoke для вызова компонента и дальнейшей передачи результата через тег cfoutput. Рассмотрим тег cfinvoke, узнаем поподробнее, что же там происходит.

Cтрока:

component="com.macromedia.test.HelloWorld"

указывает на вызываемый компонент. Путь com.macromedia.test.HelloWorld указывает на файл com\macromedia\test\HelloWorld.cfc (указан относительный по отношению к директории сервера путь).

Cтрока:

method="sayHello"

указывает, какая именно функция или метод должны быть исполнены в теле компонента.

Cтрока:

returnVariable="message"

определяет имя переменной для хранения данных, поступивших от компонента. Эта переменная нужна для возврата строки, поступившей от метода компонента. Тег cfoutput используется для отображения переменной в вашем браузере.

Сохраните вашу страницу ColdFusion под именем test.cfm и просмотрите её броузере. В строке адреса необходимо ввести http://localhost/com/macromedia/test/test.cfm (поменяйте имя домена на нужное или добавьте номер порта к строке localhost в соответствии с вашими настройками, например http://localhost:8500/com/macromedia/test/test.cfm). В окне браузера должно отобразиться: "Hello World". Если ничего не отображается или вы получаете сообщение об ошибке, проверьте код компонента, код в файле test.cfm и правильность адреса в браузере.

Вы только что испытали мощь компонентов ColdFusion. Они позволяют создавать модульную программу, которая может использоваться совершенно по-разному, и даже разными приложениями (в нашем случае это ColdFusion MX и Macromedia Flash MX). Теперь мы готовы вызвать наш компонент из flash-клипа.

Создание flash-клипа для клиента

Создайте новый файл .fla в Macromedia Flash MX. В директории, куда вы распаковали zip-файл, можно найти файл gatewayHelloWorld.fla.

Файл .fla, который вы создадите в Macromedia Flash MX, довольно прост: он будет соединяться с сервером, вызывать в файле компонента HelloWorld.cfc метод, загружающий данные с сервера, и отображать их в окне output. Для начала посмотрите код для нашего flash-файла. Ниже дана пошаговая разбивка этого кода.

Клип состоит из одного кадра.

Временаая диаграмма для примера работы Flash Remoting состоит из одного кадра

Вот код для нашего файла:

#include "NetServices.as"
#include "NetDebug.as"

function Result()
{
//receives data returned from the method
this.onResult = function(result)
{
trace("Data received from server : " + result);
}

this.onStatus = function(error)
{
trace("Error : " + error.description);
}
}

NetServices.setDefaultGatewayUrl
("http://localhost:8500/flashservices/gateway");
var gw = NetServices.createGatewayConnection();
var server = gw.getService
("com.macromedia.test.HelloWorld", new Result());
server.sayHello();

Сначала код присоединяет библиотеки ActionScript:

#include "NetServices.as"
#include "NetDebug.as"

Прикрепление этих файлов необходимо, так как они содержат код ActionScript и объекты, необходимые для соединения с Macromedia Flash Remoting. NetDebug.as необходим для проверки и отладки связи между Flash и сервером. После включения файла NetDebug.as можно отследить установку связи между клиентом и сервером в окне NetConnection в Flash МХ (Ищите в меню Window > NetConnection Debugger).

Затем наш код создаёт новый класс под названием Result. Методы в экземпляре данного класса используются для перехвата данных с сервера и последующей их обработки.

function Result()
{

this.onResult = function(result)
{
trace("onResult : " + result);
}

this.onStatus = function(error)
{
trace("onStatus called : " + error.description);
}
}

В этом коде создаётся класс Result с двумя методами. Первый метод:

this.onResult = function(result)
{
trace("Data received from server : " + result);
}

получает ответ от компонента, находящегося на сервере. Когда поступают данные с сервера, вызывается метод onResult. В этом случае данные, полученные с сервера, с помощью метода trace() выводятся в окне output в Macromedia Flash MX.

Второй метод называется onStatus. Он вызывается в случае, если при попытке загрузки данных с сервера произошла ошибка. В таком случае данные об ошибке передаются методу onStatus. Описание ошибки можно получить через свойство description так, как это реализовано в данном методе. Сообщение об ошибке выводится в окне output в Flash MX с помощью метода trace(). Вот как это работает:

this.onStatus = function(error)
{
trace("Error : " + error.description);
}

Класс, содержащий эти методы, не обязательно должен называться Result.

После создания класса Result все готово для установки соединения с сервером. Сначала необходимо прописать путь к вашему серверу ColdFusion при помощи следующего кода. Если ваш сервер находится по другому адресу, внесите в этот код необходимые коррективы.

NetServices.setDefaultGatewayUrl(http://localhost:8500/flashservices/gateway);

Далее, используя объект NetServices, установим соединение с сервером. Вот код:

var gw = NetServices.createGatewayConnection();

Обратите внимание на то, что на данном этапе Flash MX не устанавливает соединения с сервером. Думайте, что объект, возвращаемый этим кодом, является соединением с сервером. Далее нам следует указать путь к компоненту (к которому мы хотим получить доступ) на сервере:

var server = gw.getService("com.macromedia.test.HelloWorld", new Result());

Обратите внимание, что этому методу передаются два параметра. Первый, com.macromedia.test.HelloWorld является путём к компоненту, и определяет тот компонент, с котором мы хотим соединиться (вы можете изменить этот путь в соответствии с местоположением вашего компонента). Второй параметр, new Result(), создаёт экземпляр класса Result. Передача экземпляра new Result() данному методу означает, что метод должен вызвать функции объекта Result (onResult, onStatus), когда сервер отправляет данные.

Примечание: Вам может показаться странным передача экземпляра класса Result через new Result(). Мы могли бы сделать это таким образом:

var r = new Result();
var server = gw.getService("com.macromedia.test.HelloWorld", r);

Однако, поскольку мы не будем использовать этот экземпляр после загрузки данных, нам нет необходимости сохранять экземпляр класса в переменной.

Метод getService() возвращает объект, который представляет собой реальный компонент на сервере. В нашем случае мы сохранили его в переменной server. Теперь мы можем вызвать метод в нашем компоненте через переменную server, как показано в примере:

server.sayHello();

Именно здесь наш код вызывает сервис и компонент на сервере. Вот как протекает этот процесс:

  1. Flash MX вызывает сервер ColdFusion MX, передавая ему имя компонента.
  2. Macromedia Flash Remoting определяет местонахождение компонента на основании пути, заданного во flash-клипе, и после этого вызывает функцию, также определённую в клипе.
  3. Функция в компоненте возвращает строку.
  4. Межсетевой интерфейс (gateway) получает от функции в компоненте строку и передаёт её flash-клипу.
  5. Flash-клип получает от сервера строку (через Flash Remoting) и передаёт её методу onResult() указанного объекта (в данном случае это экземпляр класса Result).
  6. Метод onResult() обрабатывает полученные данные.

Конечно, вам необязательно знать все подробности этого процесса, так как ColdFusion MX, Flash MX, и Macromedia Flash Remoting сами о них позаботятся.

Тестирование примера

Для тестирования нашего примера проделайте следующее.

  1. Убедитесь, что ColdFusion сервер работает.
  2. Протестируйте ваш клип в Flash MX (Control > Test Movie). В окне output должно появиться сообщение "Hello World", как показано ниже:

    Тестирование совместной работы Flash Remoting и ColdFusion

  3. Обработайте полученную строку так, чтобы она отображалась в swf или html файлах. Например, можно присвоить данные динамическому текстовому полю.
  4. Опубликуйте приложение.
  5. Просмотрите его в броузере.

Заключение

Вы узнали, как сделать простой flash-клип, который использует Flash MX, ColdFusion MX и Macromedia Flash Remoting. Возможно, вам покажется, что вывод "Hello World" — не самое захватывающее из того, что можно сделать. Однако "Hello World" — всего лишь строка. Вы можете изменить компонент так, чтобы он возвращал другие типы данных — массивы, информацию из базы данных и т.д. Кроме того, вы можете использовать такие серверные компоненты и службы как:

  • ColdFusion Components
  • просто страницы ColdFusion
  • Server-side ActionScript (серверный ActionScript)
  • Java
  • Web Services

и т.п. для заполнения ваших массивов и баз данных. Эти возможности ColdFusion МХ позволят вам полностью использовать функциональность Macromedia MX на вашем сайте. Более подробно об этом вы можете почитать здесь: ColdFusion MX, Macromedia Flash MX, и Dreamweaver MX.

 

Об авторе

В течение последних трёх лет Майк Чемберз создавал различные приложения, используя в основном Macromedia Flash, Generator и Java. У него также есть опыт работы с ASP, JSP, PHP и ColdFusion. В последнее время он работает с Macromedia Flash и встроенными приложениями, внося ценный вклад в разработку "Macromedia Flash Pocket PC Player Authoring Kit." Майк является соавтором работ "Flash Enabled" и “Generator and Flash Demystified."

В 1998 Майк получил степень магистра по международной экономике и изучению Европы в Международной школе Джона Хопкинса.

Оригинальная статья:
http://www.macromedia.com/desdev/mx/coldfusion/articles/startremoting.html

Перевод:
Гришин Кирилл sunman5@mail.ru


Редактор:
Сирык Ростислав rost@rs.com.ua
Дэдлайн

 

Примечания:
Это первая статья из цикла статей, посвященных технологии FlashRemoting

Статус документа
: в процессе
>>> Статьи · Прототипы · Компоненты · Персоналии · Глоссарий · Что делатьНаверх
  © Разработка: Ростислав Сирык · О проекте "Флэш Потрошитель" · Архивы сайта
Flash MX

Стандарты Actionscript

Внутренняя архитектура Actionscript

Атрибуты тэгов OBJECT и EMBED

Метод LoadVars.decode

Свойство Stage.showMenu

System.security.allowDomain

System.showSettings

Динамическое присоединение компонентов

onKeyDown против onClipEvent(keyDown)

Модель событий Flash MX

ASBroadcaster — ядро модели событий Flash MX

Чтение ID3-тэгов из файла .mp3

ASSetPropFlags — функция защиты свойств объектов

Объект Local SharedObject

Удаление Local SharedObject

Глобальный путь к классам

Level против root

Dreamweaver

Создаем расширение для Dreamweaver MX

Настройка Dreamweaver MX

Длинное тире, короткое тире, дефис. Правописание и Dreamweaver

Illustrator

Растеризация текста
FlexiPedia