Expression Language (EL) es un lenguaje que ofrece JSP para poder crear contenido de forma dinámica evitando el uso de Java embebido. Su principal función es permitir escribir expresiones dentro de una página JSP que pueden evaluar condiciones, acceder a objetos e invocar métodos.

Sintaxis
Las expresiones en EL se escriben utilizando la siguiente sintaxis:

O alternativamente de la siguiente forma:

Esta segunda sintaxis fue introducida a partir de la versión 2.1 de la especificación con la introducción de otra tecnología llamada JavaServer Faces, y denota una expresión que debe evaluarse de forma diferida.

Objetos implícitos
De igual forma que existen algunos objetos definidos de forma implícita dentro de un servlet para su acceso desde dentro de los scripts de un JSP, EL proporciona variables especializadas equivalentes para acceder a ellas desde dentro de las expresiones.

A los atributos a nivel de página, petición, sesión y aplicación se accede con las variables pageScope, requestScope, sessionScope y applicationScope respectivamente.

Por ejemplo, la siguiente expresión:

Es equivalente a ejecutar el siguiente código en un servlet tradicional:

A través de las variables param y paramValues se puede acceder a los parámetros HTTP de una petición. La variable paramValues es similar a param, pero devuelve todos los valores asociados al nombre del parámetro dado, ya que para un mismo nombre puede haber varios valores.

La mayoría de estas variables son de tipo Map, por lo que opcionalmente se puede acceder a los valores utilizando la notación de corchetes:

Otras variables como header, headerValues, cookie y initParam dan acceso a las cabeceras HTTP, cookies y parámetros de inicialización del contexto respectivamente. Otra variable es pageContext, que da acceso a los objetos de la clase servlet generada como resultado de la compilación del JSP.

Operadores
EL permite usar los siguientes operadores:

– Aritméticos: +, -, *, /, div, %, mod

– Lógicos: and, &&, or, ||, not, !

– Relacionales: ==, eq, !=, ne, <, lt, >, gt, <=, ge, >=, le

– Condicional: a ? b : c

– Vacío: empty

Este último operador comprueba si una colección dada está vacía.