Парадигма | императивный , объектно-ориентированный |
---|---|
Разработано | Джереми Аллер , Джозеф Дж. Аллер |
Разработчик | Adobe Systems ( ColdFusion ), Lucee Association ( Lucee ), New Atlanta и aw2.0 (openBD), The Railo Company ( Railo ) |
Впервые появился | 1995 ( 1995 ) |
Стабильный релиз | Выпуск 2023 / 2023 ( 2023 ) |
Язык реализации | Ява |
ОС | Кроссплатформенный |
Лицензия | Зависит от реализации. Доступны проприетарные , LGPL и GPL -лицензированные движки. |
Расширения имени файла | .cfm, .cfc |
Веб-сайт | www.adobe.com/products/coldfusion |
Основные внедрения | |
Adobe ColdFusion , Lucee , Railo , BlueDragon, Open BlueDragon | |
Под влиянием | |
Люси |
ColdFusion Markup Language , более известный как CFML , — это скриптовый язык для веб-разработки, работающий на виртуальной машине Java (JVM), .NET Framework и 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, который был первой реализацией языка CFML на Java. (ColdFusion был написан на C и C++ до версии 6.0, первой версии на основе Java, выпущенной в 2002 году.) New Atlanta лицензировала BlueDragon около 2001 года и сделала его доступным в качестве коммерческого продукта, в конечном итоге создав реализацию CFML на .NET . Open BlueDragon является ответвлением коммерческого продукта BlueDragon и был впервые выпущен в 2008 году.
Движок Railo CFML начинался как студенческий проект в 2002 году и был впервые запущен как коммерческий проект в 2005 году. [6] Railo объявили, что они делают исходный код движка открытым в 2008 году, а первая версия с открытым исходным кодом была выпущена в 2009 году.
18 июня 2009 года на конференции CFUnited компания Adobe объявила о формировании Консультативного комитета CFML [7] , который будет отвечать за руководство и рассмотрение изменений в языке CFML. Эта работа была прекращена в 2010 году. Группа Google CFML Conventional Wisdom была создана как форум для открытых публичных дискуссий о функциях языка и движка; ее использование сократилось с 2011 года. [ необходима цитата ]
В 2012 году был запущен OpenCFML Foundation. Его функция — продвигать приложения и платформы 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" arguments = "-e" outputfile = "C:\\Temp\\out.txt" timeout = "1" />
Различные теги предлагают возможность проверки типов входных параметров (например, cffunction, cfparam, cfqueryparam), если программист специально объявляет их тип. Эта функциональность используется с cfqueryparam для защиты веб-приложений и баз данных от хакеров и вредоносных веб-запросов, таких как SQL-инъекция .
Почти 100 тегов и множество других функций составляют основу языка CFML. Ниже приведен список тегов CFML по их функциям или назначению. [9]
CFML допускает языковые расширения в виде пользовательских тегов, которые являются тегами, созданными разработчиком, которые не являются частью самого языка CFML. Пользовательские теги — это обычные файлы CFML, которые предназначены для вызова в качестве тегов, хотя можно рассматривать шаблон как пользовательский тег, так и обычный шаблон. Пользовательские теги пишутся на CFML и обычно вызываются путем добавления префикса cf_ к имени файла пользовательского тега , хотя существуют и другие способы вызова пользовательских тегов.
Если шаблон вызывается как пользовательский тег, атрибуты, используемые для вызова этого тега, доступны внутри тега в области атрибутов , а переменные для вызывающей страницы доступны через область вызывающего объекта .
Например, если написать пользовательский тег для выполнения сложения , взяв два атрибута и сложив их вместе, тег будет представлять собой файл addition.cfm, который может выглядеть следующим образом:
<cfset caller.addition = attribute.first + attribute.second / > < cfexit method = "exitTag" />
Предполагая, что тег находится в том же каталоге, что и файл (или в предопределенном каталоге customtags), его можно вызвать следующим образом:
< cf_addition первый = "1" второй = "2" >
Теги CFX — это пользовательские теги, которые разрабатываются с использованием Java или C++ и имеют префикс cfx_, как и cf_. Теги Java и C++ добавляются в среду выполнения CFML с помощью администратора движка CFML или путем редактирования файлов конфигурации.
В некоторых движках CFML теги JSP также могут быть включены в страницы CFML с помощью тега <cfimport>. [ необходима ссылка ]
Язык разметки ColdFusion включает в себя набор функций, которые используются для выполнения логических и арифметических операций, а также для манипулирования данными.
функция | ссылка | код |
---|---|---|
Множество | [10] | (ArraySort, ArrayAppend, ArrayDeleteAt...) |
Конверсия | [11] | (URLEncodedFormat, ToString...) |
Дата и время | [12] | (LsTimeFormat, DateAdd, DateDiff...) |
Решение | [13] | (Определено, IIF...) |
Отображение и форматирование | [14] | (CJustify, NumberFormat...) |
Динамическая оценка | [15] | (DE, Оценить...) |
Расширяемость | [16] | (СоздатьОбъект, ToScript...) |
Изображение | [17] | (Поворот изображения, Добавление границы изображения...) |
Международные функции | [18] | (Установить локаль, Получить информацию о часовой пояс...) |
Список | [19] | (FindOneOf, ListSetAt...) |
Математический | [20] | (Случайный порядок, квадрат...) |
Другие функции | [21] | (WriteOutput, GetBaseTemplatePath...) |
Запрос | [22] | (ЗапросДобавитьСтолбец, ЗапросУстановитьЯчейку...) |
Безопасность | [23] | (Шифрование, расшифровка...) |
Нить | [24] | (Обратный, HTMLCodeFormat...) |
Структура | [25] | (StructKeyExists, StructDelete...) |
Система | [26] | (GetTickCount, GetTempFile...) |
XML | [27] | (XMLParse, GetSOAPResponse...) |
CFC предоставляют некоторые (не все) типичные функции и возможности, предоставляемые объектно-ориентированными (ООП) языками. Чтобы создать CFC:
CFC — это простые CFML. В CFC могут использоваться любые теги CFML, функции, пользовательские теги, другие компоненты и т. д.
CFC можно использовать различными способами. Если метод, содержащийся в CFC, просто нужно вызвать, тег <cfinvoke> создаст экземпляр CFC, вызовет нужный метод, а затем уничтожит экземпляр CFC. <cfinvoke> принимает имя компонента (без расширения .cfc) и метод для выполнения. Для доступа к любым возвращаемым данным атрибут RETURNVARIABLE предоставляет имя переменной, содержащей все, что возвращает функция. CFC создаются с использованием четырех тегов, сохраняются как файлы .CFC и вызываются с использованием тега <cfinvoke>. [28]
В примере ниже компонент temperature.cfc имеет метод FtoC, который преобразует температуру из градусов Фаренгейта в градусы Цельсия. Шаблон test.cfm вызывает метод и преобразует 212 градусов Фаренгейта и выводит результат.
<!--- температура.cfc ---> <cfcomponent> <cffunction имя = "FtoC" доступ = "public" возвращаемый тип = "numeric" > <cfargument имя = "fahrenheit" обязательно = "yes" тип = "numeric" / > <cfset ответ = ( fahrenheit - 32 ) * 100 / 180 / > <cfreturn ответ / > </cffunction> </cfcomponent> <!--- тест.cfm ---> <cfset fDegrees = 212 / > <cfinvoke компонент = "температура" метод = "FtoC" возвращаемая переменная = "результат" > < cfinvok имя аргумента = "fahrenheit" значение = "#fDegrees#" /> </cfinvoke> <cfoutput> # fDegrees # ° F = # результат # ° С </cfoutput> < br />
CFC также могут быть созданы как объекты. Если предположить, что файл CFC называется Person.cfc, то экземпляр этого CFC будет создан следующим образом:
<cfset person = CreateObject ( "component" , "Person" ) / >
CFC также формируют основу возможности создания веб-сервисов в CFML. CFC создается обычным способом, а атрибут access="remote", добавленный к любой функции в CFC, сделает эту функцию доступной для вызова в качестве веб-сервиса на основе SOAP . Механизм CFML автоматически генерирует WSDL и создает все необходимые заглушки для функционирования веб-сервиса.