Язык разметки ColdFusion , более известный как CFML , — это язык сценариев для веб-разработки, который работает на виртуальной машине Java (JVM), платформе .NET и Google App Engine . Доступно несколько коммерческих и бесплатных программных реализаций механизмов CFML с открытым исходным кодом , включая Adobe ColdFusion , Lucee , New Atlanta BlueDragon ( версии для Java и .NET), Railo , Open BlueDragon и другие серверные механизмы CFML .
В своей простейшей форме, как и многие другие языки веб-скриптов, CFML дополняет стандартные файлы HTML командами базы данных , условными операторами , функциями форматирования высокого уровня и другими элементами для создания веб-приложений . [1] [2] CFML также включает в себя множество других конструкций, включая компоненты ColdFusion (CFC), версию объектов CFML , которые позволяют отделять бизнес-логику от представления.
CFML можно написать с использованием тегов или CFScript , который напоминает JavaScript ( ECMAScript ).
Страницы в приложении CFML включают в себя теги и функции CFML на стороне сервера в дополнение к тегам HTML. Современные приложения CFML также имеют тенденцию иметь CFC, к которым обращаются страницы CFML для выполнения бизнес-логики. Когда веб-браузер запрашивает страницу в приложении ColdFusion, она автоматически предварительно обрабатывается сервером приложений ColdFusion . [3]
CFML также можно использовать для создания других языков, помимо HTML, таких как XML , JavaScript , CSS и т. д.
Несмотря на название, CFML не является языком разметки. Это также не SGML , поскольку некоторые основные функции CFML не позволяют ему соответствовать.
Механизм CFML настроен таким образом, что определенные расширения файлов на сервере (.cfm, .cfc) передаются механизму CFML для обработки. В случае механизмов на основе Java это достигается с помощью сервлетов Java . Механизм CFML обрабатывает только теги и функции CFML; он возвращает текст вне тегов и функций CFML на веб-сервер без изменений. [4]
Программное обеспечение, первоначально названное Cold Fusion, было создано в 1995 году корпорацией Allaire , первоначально расположенной в Миннесоте . Позже она переехала в Кембридж, штат Массачусетс, а затем, наконец, в Ньютон, штат Массачусетс, прежде чем была приобретена Macromedia в 2001 году. Таким образом, Allaire Cold Fusion стала Macromedia Cold Fusion. При выпуске версии 4 пробел в названии был удален и стал ColdFusion. Adobe приобрела Macromedia в 2005 году. По состоянию на 2023 год [обновлять]она все еще активно разрабатывает ColdFusion.
В 1998 году Алан Уильямсон и его шотландская компания n-ary начали создавать шаблонизатор для Java, упрощающий общие задачи программирования. [5] Уильямсон использовал фигурные скобки вместо тегов, но когда он увидел пример CFML и то, как он решает подобные проблемы (хотя и не на Java) с использованием синтаксиса тегов, он начал разработку того, что в конечном итоге стало BlueDragon, который была первой Java-реализацией языка CFML. (ColdFusion был написан на C и C++ до тех пор, пока в 2002 году не была выпущена версия 6.0, первая версия на основе Java.) Примерно в 2001 году New Atlanta лицензировала BlueDragon и сделала его доступным в качестве коммерческого продукта, в конечном итоге создав .NET -реализацию CFML. Open BlueDragon — это ответвление коммерческого продукта BlueDragon, впервые выпущенное в 2008 году.
Движок Railo CFML зародился как студенческий проект в 2002 году и впервые был запущен как коммерческий проект в 2005 году. [6] Railo объявила, что делает движок с открытым исходным кодом в 2008 году, а первая версия с открытым исходным кодом была выпущена в 2009 году.
18 июня 2009 года Adobe объявила на конференции CFUnited, что сформировала Консультативный комитет CFML [7] , который будет отвечать за руководство и рассмотрение изменений в языке CFML. Эта инициатива была расформирована в 2010 году. Группа Google CFML Conventional Wisdom была создана как форум для открытых, публичных дискуссий о функциях языка и движка; его использование сократилось с 2011 года .
В 2012 году был запущен Фонд OpenCFML. Его функция заключается в продвижении приложений и платформ CFML с открытым исходным кодом .
Бывший ведущий разработчик Railo Майкл Оффнер запустил Lucee , ответвление Railo , в Лондоне 29 января 2015 года. При поддержке сторонников сообщества и членов Lucee Association цель проекта — обеспечить функциональность CFML с использованием меньшего количества ресурсов, предоставляя повысить производительность и превратить CFML в современную и динамичную платформу веб-программирования.
Теги CFML имеют формат, аналогичный тегам HTML. Они заключены в угловые скобки (< и >) и обычно не имеют именованных атрибутов (ноль или более ), хотя некоторые теги (например, cfset, cfif) содержат выражения, а не атрибуты. Многие теги CFML имеют тело; то есть у них есть начальный и конечный теги, между которыми находится текст, подлежащий обработке. Например:
<cfoutput> # значение # Боб! </cfoutput>
Другие теги, такие как cfset и cfftp, никогда не имеют тела; вся необходимая информация размещается между начальным (<) символом и конечным (>) символом в форме атрибутов тега (пары имя/значение), как в примере ниже. Если теги не имеют тела, синтаксически приемлемо оставлять их незакрытыми, как в первом примере, хотя многие разработчики CFML предпочитают самозакрывать теги, как во втором примере, чтобы (возможно) сделать код более разборчивым. .
<cfset value = «Привет» > <cfset value = «Привет» / >
Даже если тег может иметь тело, в некоторых случаях его наличие может не потребоваться, поскольку атрибуты определяют всю необходимую информацию. В этих случаях, как и во втором примере выше, конечный тег (и, следовательно, тело тега) может быть опущен, а тег может быть самозакрывающимся, как в следующем примере: [8]
< cfexecute name = "C:\\winNT\\System32\\netstat.exe" аргументы = "-e" выходной файл = "C:\\Temp\\out.txt" timeout = "1" />
Различные теги предоставляют возможность проверять типы входных параметров (например, cffunction, cfparam, cfqueryparam), если программист специально объявляет их тип. Эта функция используется с cfqueryparam для защиты веб-приложений и баз данных от хакеров и вредоносных веб-запросов, таких как внедрение SQL .
Около 100 тегов и множество других функций составляют основу языка CFML. Ниже перечислены теги CFML по их функциям и назначению. [9]
CFML допускает расширения языка в виде пользовательских тегов, которые представляют собой теги, созданные разработчиком и не являющиеся частью самого языка CFML. Пользовательские теги — это обычные файлы CFML, которые предназначены для вызова в качестве тегов, хотя шаблон можно рассматривать как как пользовательский тег, так и как обычный шаблон. Пользовательские теги пишутся на языке CFML и обычно вызываются путем добавления к имени файла пользовательского тега префикса cf_ , хотя существуют и другие способы вызова пользовательских тегов.
Если шаблон вызывается как настраиваемый тег, атрибуты, используемые для вызова этого тега, доступны внутри тега в области атрибутов , а переменные вызывающей страницы доступны через область вызывающего объекта.
Например, если написать собственный тег для выполнения сложения , взять два атрибута и сложить их вместе, тег будет представлять собой файл add.cfm, который может выглядеть следующим образом:
<cfset caller.addition = атрибуты.первый + атрибуты.второй / > < метод cfexit = «exitTag» />
Предполагая, что тег находится в том же каталоге, что и файл (или в заранее определенном каталоге customtags), его можно вызвать следующим образом:
< cf_addition первый = "1" второй = "2" >
Теги CFX — это пользовательские теги, разработанные с использованием Java или C++ и имеющие префикс cfx_, как и cf_. Теги Java и C++ добавляются в среду выполнения CFML с помощью администратора механизма CFML или путем редактирования файлов конфигурации.
В некоторых механизмах CFML теги JSP также можно включать в страницы CFML с помощью тега <cfimport>. [ нужна цитата ]
Язык разметки ColdFusion включает набор функций, которые вы используете для выполнения логических и арифметических операций и манипулирования данными.
CFC предоставляют некоторые (не все) типичные функции и возможности объектно -ориентированных (ООП) языков. Чтобы создать CFC:
ХФУ – это обычные CFML. В CFC можно использовать любой тег CFML, функцию, специальный тег, другие компоненты и т. д.
ХФУ можно использовать по-разному. Если просто необходимо вызвать метод, содержащийся в CFC, тег <cfinvoke> создаст экземпляр CFC, вызовет нужный метод, а затем уничтожит экземпляр CFC. <cfinvoke> принимает имя компонента (без расширения .cfc) и метод для выполнения. Для доступа к любым возвращаемым данным атрибут RETURNVARIABLE предоставляет имя переменной, содержащей все, что возвращает функция. CFC создаются с использованием четырех тегов, сохраняются как файлы .CFC и вызываются с помощью тега <cfinvoke>. [28]
В приведенном ниже примере компонент temp.cfc имеет метод FtoC, который преобразует температуру из градусов Фаренгейта в градусы Цельсия. Шаблон test.cfm вызывает метод, преобразует значение 212 градусов по Фаренгейту и выводит результат.
<!--- temp.cfc ---> <cfcomComponent> <cffunction name = "FtoC" access = "public" returntype = "numeric" > <cfargument name = "fahrenheit" require = "yes" type = "numeric" / > <cfset ответ = ( по Фаренгейту - 32 ) * 100 / 180 / > <cfreturn ответ / > </cffunction> </cfcomComponent> <!--- test.cfm ---> <cfset fDegrees = 212 / > < cfinvoke компонент = "температура" метод = "FtoC" returnvariable = "результат" > < cfinvokeargument name = "fahrenheit" value = "#fDegrees#" /> </cfinvoke> <cfoutput> # fDegrees # ° F = # результат # ° С </cfoutput> < бр />
CFC также могут быть созданы как объекты. Если предположить, что файл CFC называется Person.cfc, экземпляр этого CFC будет создан следующим образом:
<cfset person = CreateObject ( «компонент» , «Человек» ) / >
CFC также составляют основу возможности создания веб-сервисов в CFML. CFC создается обычным способом, и атрибут access="remote", добавленный к любой функции в CFC, делает эту функцию доступной для вызова в качестве веб-службы на основе SOAP . Механизм CFML автоматически генерирует WSDL и создает все необходимые заглушки для работы веб-службы.