Articulo de referencia

Lenguaje de marcado ColdFusion

ColdFusion Markup Language , más conocido como CFML , es un lenguaje de scripting para el desarrollo web que se ejecuta en la máquina virtual Java (JVM), el framework .NET y Goo...

ColdFusion Markup Language , más conocido como CFML , es un lenguaje de scripting para el desarrollo web que se ejecuta en la máquina virtual Java (JVM), el framework .NET y Google App Engine . Existen varias implementaciones de software comerciales, gratuitas y de código abierto de motores CFML, entre las que se incluyen Adobe ColdFusion , Lucee , New Atlanta BlueDragon ( versiones para Java y .NET), Railo , Open BlueDragon y otros motores de servidor CFML .

Sinopsis

En su forma más simple, como muchos otros lenguajes de scripting web, CFML amplía los archivos HTML estándar con comandos de base de datos , operadores condicionales, funciones de formato de alto nivel y otros elementos para producir aplicaciones web . [ 1 ] [ 2 ] CFML también incluye muchas otras construcciones, incluidos los ColdFusion Components (CFC), la versión de objetos de CFML , que permiten separar la lógica de negocio de la presentación.

CFML se puede escribir utilizando etiquetas o CFScript , que se asemeja a JavaScript ( ECMAScript ).

Las páginas de una aplicación CFML incluyen etiquetas y funciones CFML del lado del servidor, además de etiquetas HTML. Las aplicaciones CFML modernas también suelen tener CFC a los que acceden las páginas CFML para ejecutar la lógica de negocio. Cuando un navegador web solicita una página en una aplicación ColdFusion, el servidor de aplicaciones ColdFusion la preprocesa automáticamente . [ 3 ]

CFML también se puede utilizar para generar otros lenguajes, además de HTML, como XML , JavaScript , CSS , etc.

A pesar de su nombre, CFML no es un lenguaje de marcado. Tampoco es SGML , ya que ciertas características básicas de CFML impiden su compatibilidad.

El motor CFML está configurado de tal manera que ciertas extensiones de archivo en el servidor (.cfm, .cfc) se le transfieren para su procesamiento. En el caso de los motores basados ​​en Java, esto se logra mediante servlets de Java . El motor CFML solo procesa etiquetas y funciones CFML; devuelve el texto fuera de las etiquetas y funciones CFML al servidor web sin modificaciones. [ 4 ]

Historia

El software, inicialmente llamado Cold Fusion, fue creado en 1995 por Allaire Corporation , originalmente ubicada en Minnesota . Posteriormente se trasladó a Cambridge, Massachusetts, y finalmente a Newton, Massachusetts, antes de ser adquirida por Macromedia en 2001. Allaire Cold Fusion se convirtió así en Macromedia Cold Fusion. En el lanzamiento de la versión 4, se eliminó el espacio del nombre para convertirse en ColdFusion. Adobe adquirió Macromedia en 2005. A partir de 2023, todavía está desarrollando activamente ColdFusion.

En 1998, Alan Williamson y su empresa escocesa, "n-ary", comenzaron a crear un motor de plantillas para Java para simplificar tareas de programación comunes. [ 5 ] Williamson utilizaba la notación de llaves en lugar de etiquetas, pero cuando vio un ejemplo de CFML y cómo resolvía problemas similares (aunque no en Java) utilizando una sintaxis de etiquetas, comenzó a desarrollar lo que eventualmente se convertiría en BlueDragon, la primera implementación en Java del lenguaje CFML. (ColdFusion se escribió en C y C++ hasta que se lanzó la versión 6.0, la primera versión basada en Java, en 2002). New Atlanta obtuvo la licencia de BlueDragon alrededor de 2001 y lo puso a disposición como producto comercial, creando finalmente una implementación de CFML para .NET . Open BlueDragon es una bifurcación del producto comercial BlueDragon y se lanzó por primera vez en 2008.

El motor Railo CFML comenzó como un proyecto estudiantil en 2002 y se lanzó por primera vez como un proyecto comercial en 2005. [ 6 ] Railo anunció que haría que el motor fuera de código abierto en 2008, y la primera versión de código abierto se lanzó en 2009.

El 18 de junio de 2009, Adobe anunció en la conferencia CFUnited la creación de un Comité Asesor de CFML [ 7 ] encargado de guiar y revisar los cambios en el lenguaje CFML. Este comité se disolvió en 2010. El grupo de Google CFML Conventional Wisdom se creó como un foro para debates públicos y abiertos sobre el lenguaje y las características del motor; su uso ha disminuido desde 2011.

En 2012 se fundó la OpenCFML Foundation. Su función es promover aplicaciones y plataformas CFML de código abierto .

El ex desarrollador principal de Railo, Michael Offner, lanzó Lucee , una bifurcación de Railo , en Londres el 29 de enero de 2015. Con el apoyo de la comunidad y los miembros de la Asociación Lucee, el objetivo del proyecto es proporcionar la funcionalidad de CFML utilizando menos recursos, ofreciendo un mejor rendimiento y llevando a CFML más allá de sus orígenes hacia una plataforma de programación web moderna y dinámica.

En 2025, CFML todavía estaba en uso. Lucee celebrará una conferencia sobre CFML, CFCAMP, los días 22 y 23 de mayo de 2025. [ 8 ] La Cumbre de Adobe ColdFusion 2025 se celebrará del 21 al 24 de septiembre de 2025. [ 9 ]

Sintaxis

Las etiquetas CFML tienen un formato similar al de las etiquetas HTML. Se encierran entre corchetes angulares (< y >) y generalmente tienen cero o más atributos con nombre , aunque algunas etiquetas (por ejemplo, cfset, cfif) contienen una expresión en lugar de atributos. Muchas etiquetas CFML tienen cuerpo; es decir, tienen etiquetas de inicio y fin con texto que se procesará entre ellas. Por ejemplo:

<cfoutput> # valor # ¡ Bob! </cfoutput>

Otras etiquetas, como cfset y cfftp, no tienen cuerpo; toda la información necesaria se encuentra entre el carácter inicial (<) y el carácter final (>) en forma de atributos de etiqueta (pares nombre/valor), como en el ejemplo siguiente. Si es válido que las etiquetas no tengan cuerpo, es sintácticamente aceptable dejarlas sin cerrar, como en el primer ejemplo, aunque muchos desarrolladores de CFML optan por cerrarlas automáticamente, como en el segundo ejemplo, para (posiblemente) hacer que el código sea más legible.

<cfset value = "Hola" > <cfset value = "Hola" / >

Aunque la etiqueta pueda tener un cuerpo, incluirlo puede no ser necesario en algunos casos porque los atributos especifican toda la información requerida. En estos casos, como en el segundo ejemplo anterior, la etiqueta de cierre (y por lo tanto, el cuerpo de la etiqueta) puede omitirse y la etiqueta puede cerrarse automáticamente como en el siguiente ejemplo: [ 10 ]

< cfexecute name = "C:\\winNT\\System32\\netstat.exe" arguments = "-e" outputfile = "C:\\Temp\\out.txt" timeout = "1" />

Diversas etiquetas permiten verificar el tipo de los parámetros de entrada (por ejemplo, cffunction, cfparam, cfqueryparam) si el programador declara su tipo específicamente. Esta funcionalidad se utiliza con cfqueryparam para proteger las aplicaciones web y las bases de datos contra hackers y solicitudes web maliciosas, como la inyección SQL .

Etiquetas integradas

Casi 100 etiquetas y muchas más funciones conforman el núcleo del lenguaje CFML. A continuación se enumeran las etiquetas CFML según su función o propósito. [ 11 ]

Etiquetas personalizadas

CFML permite extensiones de lenguaje en forma de etiquetas personalizadas, que son etiquetas creadas por el desarrollador y que no forman parte del propio lenguaje CFML. Las etiquetas personalizadas son archivos CFML estándar diseñados para ser invocados como etiquetas, aunque es posible tratar una plantilla como una etiqueta personalizada y una plantilla estándar a la vez. Las etiquetas personalizadas se escriben en CFML y normalmente se invocan anteponiendo el prefijo `cf_` al nombre del archivo de la etiqueta personalizada, aunque existen otras formas de invocarlas.

Si se invoca una plantilla como una etiqueta personalizada, los atributos utilizados para invocar esa etiqueta están disponibles dentro de la etiqueta en un ámbito de atributos y las variables de la página que realiza la llamada son accesibles a través del ámbito del llamador .

Por ejemplo, si se escribe una etiqueta personalizada para realizar una suma , tomando dos atributos y sumándolos, la etiqueta sería un archivo addition.cfm que podría verse así:

<cfset caller.addition = attributes.first + attributes.second / > < cfexit method = "exitTag" />

Suponiendo que la etiqueta se encuentre en el mismo directorio que el archivo (o en un directorio predefinido llamado customtags), se puede invocar de la siguiente manera:

< cf_addition first = "1" second = "2" >

Las etiquetas CFX son etiquetas personalizadas desarrolladas con Java o C++ y llevan el prefijo cfx_, al igual que cf_. Estas etiquetas se añaden al entorno de ejecución de CFML mediante el administrador del motor CFML o editando los archivos de configuración.

En algunos motores CFML, las etiquetas JSP también se pueden incluir en páginas CFML usando la etiqueta <cfimport>. [ 12 ]

Funciones

El lenguaje de marcado ColdFusion incluye un conjunto de funciones que se utilizan para realizar operaciones lógicas y aritméticas, así como para manipular datos.

Componentes de fusión en frío (CFC)

Los CFC proporcionan algunas (no todas) las características y funcionalidades típicas que ofrecen los lenguajes orientados a objetos (POO). Para crear un CFC:

Crea un archivo con la extensión .CFC (esto distingue los archivos CFC de las plantillas de ColdFusion, que tienen la extensión .CFM).
Utilice cuatro etiquetas para crear los componentes, definir sus funciones y argumentos , y devolver un valor.
<cfcomponent>
Define un CFC
<cffunction>
Define las funciones (métodos) dentro de un CFC.
<cfargument>
Define los argumentos (parámetros) que acepta una función.
<cfreturn>
Devuelve un valor o resultado de una función.

Los CFC son CFML estándar. Dentro de un CFC se puede utilizar cualquier etiqueta, función, etiqueta personalizada, otros componentes, etc., de CFML.

Los CFC se pueden usar de varias maneras. Si solo se necesita invocar un método contenido en un CFC, la etiqueta creará una instancia del CFC, invocará el método deseado y luego destruirá la instancia del CFC. toma el nombre del componente (sin la extensión .cfc) y el método a ejecutar. Para acceder a los datos devueltos, el atributo RETURNVARIABLE proporciona el nombre de una variable que contendrá lo que devuelva la función. Los CFC se crean usando cuatro etiquetas, se guardan como archivos .CFC y se invocan usando la etiqueta. [ 31 ]<cfinvoke><cfinvoke><cfinvoke>

En el ejemplo siguiente, el componente temperature.cfc tiene un método FtoC que convierte la temperatura de Fahrenheit a Celsius. La plantilla test.cfm invoca este método, convierte 212 grados Fahrenheit y muestra el resultado.

<!--- temperature.cfc ---> <cfcomponent> <cffunction name = "FtoC" access = "public" returntype = "numeric" > <cfargument name = "fahrenheit" required = "yes" type = "numeric" / > <cfset answer = ( fahrenheit - 32 ) * 100 / 180 / > <cfreturn answer / > </cffunction> </cfcomponent> <!--- test.cfm ---> <cfset fDegrees = 212 / > <cfinvoke component = "temperature" method = "FtoC" returnvariable = "result" > < cfinvokeargument name = "fahrenheit" value = "#fDegrees#" /> </cfinvoke> <cfoutput> # fDegrees # ° F = # result # ° C </cfoutput> < br />

Los CFC también pueden instanciarse como objetos. Suponiendo un archivo CFC llamado Person.cfc, una instancia de este CFC se instanciaría de la siguiente manera:

<cfset person = CreateObject ( "component" , "Person" ) / >