Статьи

Начало работы с Coldfusion MX и Flash Remoting

Одна из замечательных новых функций Macromedia ColdFusion MX — Macromedia Flash Remoting. Macromedia Flash Remoting позволяет легко использовать функциональность ColdFusion MX в фильмах Macromedia Flash, используя знакомый синтаксис и объекты Macromedia Flash.

Сегодня мы рассмотрим простой пример Macromedia Flash Remoting. SWF будет использовать Macromedia Flash Remoting для вызова компонента ColdFusion MX (также известного как CFC) на сервере. Компонент ColdFusion вернет строку, которая будет загружена в Macromedia Flash и отображена.

Начиная

1. Загрузите учебные файлы.

Все нужные вам файлы можно скачать здесь (35 КБ) .

Создайте папку в cf_webrootcommacromediatest. Распакуйте ZIP-файл в тестовую папку. Обратите внимание, что на протяжении всего руководства мы будем ссылаться на cf_webroot. Ваш cf_webroot зависит от места установки.

2. Установите необходимое программное обеспечение

Программное обеспечение, которое мы будем использовать в этом руководстве, включает в себя:

  • Macromedia Flash MX
  • Macromedia ColdFusion MX
  • Компоненты Flash Remoting для Macromedia Flash MX

Вы можете скачать пробные версии программного обеспечения, перечисленные здесь. Следуйте инструкциям мастера установки, чтобы убедиться, что все программное обеспечение установлено правильно.

Создание серверного кода

Серверный код является простым компонентом ColdFusion. Он включен в файл HelloWorld.cfc в папке 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 который является методом. Таким образом, компонент теперь содержит тег cffunction с именем «sayHello», в который cfreturn тег cfreturn . И когда вы вызываете этот компонент, он возвращает строку «HelloWorld» для любого URL-адреса, службы и т. Д., Называемых методом. Внутри компонента вы можете иметь столько функций, сколько захотите, но для этого примера мы включим только одну.

Также обратите внимание, что значение атрибута доступа является « remote » в теге cffunction. Этот атрибут необходим, если вы хотите, чтобы фильмы Flash (или другие удаленные службы) обращались к методам компонента.

Вот и все! Мы успешно создали компонент. Обратите внимание, что соответствующий файл находится здесь
coldfusionmx_webrootcommacromediatestHelloWorld.cfc

Почему я дал указание поместить файлы в эту папку? Ну, компоненты не упоминаются просто по имени — они также упоминаются по местоположению (в данном случае, coldfusionmx_webrootcommacromediatest). Итак, поместив свой компонент в папку commacromediatest, вы:

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

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

Ну и что дальше? В этот момент вы можете начать создавать код Macromedia Flash для доступа к вашему компоненту, но сначала давайте создадим простую страницу ColdFusion, чтобы убедиться, что компонент действительно работает. Если мы протестируем его сейчас, будет проще отладить любые проблемы, которые могут возникнуть, чем отладку, когда мы начнем работать с Macromedia Flash MX.

В каталоге cfusionmx_webroot / com / macromedia / test / есть файл с именем test.cfm, который содержит следующий код:

 <cfoutput>  <cfinvoke          component="com.macromedia.test.HelloWorld"          method="sayHello"      returnVariable="message"          />      #message#  </cfoutput> 
Файл test.cfm использует тег cfinvoke для вызова компонента, а затем распечатывает выходные данные компонента с тегом cfoutput . Теперь давайте cfinvoke атрибуты тега cfinvoke , чтобы понять, что происходит.

Код, который гласит:

 component="com.macromedia.test.HelloWorld" 

указывает, какой компонент будет вызван. Путь com.macromedia.test.HelloWorld указывает на файл commacromediatestHelloWorld относительно папки cf_webroot.

Следующий код:

 method="sayHello" 

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

Следующий раздел:

 returnVariable="message" 

указывает имя переменной, которую мы будем использовать для хранения любых данных, возвращаемых компонентом. Мы будем использовать эту переменную для возврата строки из метода компонента, а тег cfoutput для отображения переменной в веб-браузере.

Сохраните страницу ColdFusion, test.cfm и просмотрите ее в веб-браузере по адресу http: //localhost/com/macromedia/test/test.cfm (измените имя домена или добавьте номер порта, необходимый для вашего конкретного набора вверх). Должно появиться сообщение «Hello World». Если это не так или вы получили ошибку, проверьте код компонента, тестовую страницу CFML и URL-адрес для опечаток.

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

Создание клиентского кода в Macromedia Flash MX

Создайте новый фильм Macromedia Flash, а затем откройте его с помощью Macromedia Flash MX. В папке, куда вы распаковали ZIP-файл для этого урока, найдите фильм Macromedia Flash с именем gatewayHelloWorld.fla.

Созданный нами фильм Macromedia Flash будет прост: он установит соединение с сервером, вызовет метод в HelloWorld.cfc (который будет загружать данные с сервера) и отобразит его в окне вывода. Сначала давайте посмотрим на ActionScript для фильма Macromedia Flash. Ниже приведено пошаговое руководство по коду. Фильм имеет один кадр, как показано ниже.

Код ActionScript выглядит следующим образом:
#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, так как они содержат код ActionScript и объекты, необходимые для взаимодействия с Macromedia Flash Remoting. NetDebug.as используется для отладки связи между Macromedia Flash и сервером. Когда включен файл NetDebug.as, вы можете просмотреть все коммуникации клиент / сервер, открыв панель NetConnection в Macromedia Flash MX («Окно»> «Отладчик NetConnection»).

Затем фильм создает новый класс ActionScript, который называется «Результат». Он использует методы в экземпляре класса для перехвата и обработки данных, полученных с сервера.

 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 . В этом случае код приложения печатает ответ от сервера в окно вывода в Macromedia Flash MX с использованием метода trace() .

Затем код приложения создает функцию с именем onStatus . Это вызывается, если возникает ошибка при попытке загрузить данные с сервера. Когда происходит ошибка, она передается методу. Вы можете получить доступ к описанию ошибки через свойство description, как показано здесь. В этом случае он выводит сообщение об ошибке с сервера в окно вывода в Macromedia Flash, используя метод trace() . Код ниже иллюстрирует этот сценарий:

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

Обратите внимание, что объект, содержащий методы, не обязательно должен называться Result.

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

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

Затем используйте объект NetConnection для подключения к серверу ColdFusion MX:

 var gw = NetServices.createGatewayConnection(); 

Обратите внимание, что в данный момент фильм Macromedia Flash не подключается к серверу - вместо этого думайте об объекте, возвращаемом этим кодом, как о соединении с сервером. Затем получите ссылку на компонент, который находится на сервере, к которому вы хотите получить доступ:

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

Обратите внимание, что два параметра передаются методу getService . Первый параметр, com.macromedia.test.HelloWorld - это путь к нашему компоненту - он определяет компонент, к которому вы подключаетесь (вам может потребоваться изменить этот параметр в зависимости от местоположения вашего компонента).

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

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

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

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

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

 server.sayHello(). 

На этом этапе код вызывает службу и компонент на сервере. Вот как это работает:

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

Чтобы запустить пример и проверить фильм, выполните следующие действия.

  1. Убедитесь, что сервер ColdFusion MX работает.
  2. В Flash MX проверьте фильм, выбрав «Управление»> «Тестировать фильм». «Hello World» появится в окне вывода Flash MX следующим образом:
    образ
  3. Опубликуйте свой Flash-фильм.
  4. Просматривайте свой Flash-фильм в браузере. Компонент ColdFusion создает данные «Hello World» в фильме Flash.
Вывод

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

  • Компоненты ColdFusion (как в этом примере)
  • Страницы ColdFusion
  • Серверный ActionScript
  • Джава
  • Веб сервисы

Эти функции ColdFusion MX помогут вам использовать функциональность Macromedia MX на вашем веб-сайте. Эти темы представлены в центрах разработки приложений для ColdFusion MX, Macromedia Flash MX и Dreamweaver MX.

Воспроизведено с разрешения Macromedia