El lenguaje de expresión de Jakarta ( EL ; anteriormente Lenguaje de expresión y Lenguaje de expresión unificado ) es un lenguaje de programación de propósito especial que se utiliza principalmente en aplicaciones web de Jakarta EE para incrustar y evaluar expresiones en páginas web. Los autores de especificaciones y los grupos de expertos de las tecnologías de nivel web de Java EE han trabajado en un lenguaje de expresión unificado que se incluyó por primera vez en la especificación JSP 2.1 (JSR-245) y luego se especificó por sí solo en JSR-341, parte de Java EE 7.
El lenguaje de expresión comenzó como parte de la biblioteca de etiquetas estándar de JavaServer Pages (JSTL) y originalmente se llamaba SPEL (lenguaje de expresión más simple posible), luego simplemente lenguaje de expresión ( EL ). Era un lenguaje de script que permitía el acceso a componentes Java ( JavaBeans ) a través de JSP . Desde JSP 2.0 , se ha utilizado dentro de las etiquetas JSP para separar el código Java de JSP y para permitir un acceso más fácil a los componentes Java (que en el código Java).
Con el paso de los años, el lenguaje de expresiones ha evolucionado para incluir funciones más avanzadas y se incluyó en la especificación JSP 2.0. La creación de scripts se hizo más sencilla para los diseñadores de contenido web que tenían poco o prácticamente ningún conocimiento del lenguaje Java básico. Este lenguaje de scripts convirtió a JSP en un lenguaje de scripts en el verdadero sentido de la palabra. Antes de EL, JSP consistía en algunas etiquetas especiales como scriptlets , expresiones, etc. dentro de las cuales se escribía código Java de forma explícita. Con EL, el diseñador de contenido web solo necesita saber cómo realizar llamadas adecuadas a los métodos básicos de Java.
EL era, tanto sintáctica como semánticamente, similar a las expresiones de JavaScript :
object.property
tiene el mismo significado queobject['property']
EL también liberó al programador de tener que conocer las particularidades de cómo se accede realmente a los valores: object.property
puede significar (dependiendo de lo que object
sea) object.get("property")
o object.getProperty("property")
o object.getProperty()
etc.
Durante el desarrollo de JSP 2.0 se lanzó la tecnología JavaServer Faces , que también necesitaba un lenguaje de expresión, pero el lenguaje de expresión definido en la especificación JSP 2.0 no satisfacía todas las necesidades de desarrollo con tecnología JSF. Las limitaciones más obvias eran que sus expresiones se evaluaban inmediatamente y los componentes JSF no podían invocar métodos en objetos del lado del servidor. Se creó un lenguaje más potente con las siguientes nuevas características:
El nuevo lenguaje de expresión funcionó bien para los propósitos de JSF. Pero los desarrolladores tuvieron problemas al integrar JSP EL con JSF EL debido a conflictos. Debido a estas incompatibilidades, se inició la iniciativa de lenguaje de expresión unificado para unificar estos lenguajes de expresión. A partir de JSP 2.1, los lenguajes de expresión de JSP 2.0 y JSF 1.1 se fusionaron en un único lenguaje de expresión unificado (EL 2.1).
La versión 3.0 del lenguaje de expresión (la unificación ya no se consideró necesaria) se desarrolló en un JSR independiente de las especificaciones JSP y JSF en JSR-341. Se agregaron algunas características nuevas, en particular los equivalentes EL de los flujos de Java 8 y las expresiones lambda . [1]
La versión 4.0 se lanzó el 7 de octubre de 2020. [2] La API se trasladó del paquete javax.el al paquete jakarta.el, como parte de la transición de Java EE a Jakarta EE. Parte de Jakarta EE 9.
La versión 5.0 se lanzó el 5 de septiembre de 2022. [3] Se eliminó un método obsoleto hace mucho tiempo, se aclararon ambigüedades en la especificación y se agregaron pequeñas mejoras de usabilidad. Parte de Jakarta EE 10.
El lenguaje de expresión unificado es una unión de los lenguajes de expresión JSP y JSF. Además de las características ya disponibles en el lenguaje de expresión JSP, el lenguaje de expresión unificado tiene las siguientes características:
Este es un ejemplo simple de uso de EL unificado dentro de una etiqueta "c:out" de JSTL:
<c:out valor="${miBean.miCampo}" />
Una expresión que llama a un método con un parámetro:
${myBean.addNewOrder('nombreDeOrden')}