JSP Langage d'expression

Le langage d'expression JSP (EL) rend très simple l'accès aux données stockées dans les JavaBeans. JSP EL peut être utilisé pour créer à la fois des expressions arithmétiques et des expressions logiques. Dans les expressions JSP EL, vous pouvez utiliser des entiers, des nombres à virgule flottante, des chaînes de caractères, les constantes true et false, ainsi que null.


Une syntaxe simple

Généralement, lorsque vous devez spécifier la valeur d'un attribut dans une balise JSP, vous utilisez simplement une chaîne de caractères :

<jsp:setProperty name="box" property="perimeter" value="100"/>

JSP EL vous permet de spécifier une expression pour représenter la valeur d'un attribut. Une syntaxe d'expression simple est la suivante :

${expr}

Ici, expr fait référence à l'expression. Les opérateurs courants dans JSP EL sont.et{}. Ces deux opérateurs vous permettent d'accéder à diverses propriétés JavaBean via des objets JSP intégrés.

Par exemple, la balise <jsp:setProperty> ci-dessus peut être réécrite à l'aide du langage d'expression comme suit :

<jsp:setProperty name="box" property="perimeter" 
                 value="${2*box.width+2*box.height}"/>

Lorsque le compilateur JSP rencontre le format "${}" dans un attribut, il génère du code pour évaluer cette expression et produit un substitut pour remplacer la valeur de l'expression.

Vous pouvez également utiliser le langage d'expression dans le texte de modèle des balises. Par exemple, la balise <jsp:text> insère simplement le texte de son corps dans la sortie JSP :

<jsp:text>
<h1>Hello JSP!</h1>
</jsp:text>

Maintenant, utilisez une expression dans le corps de la balise <jsp:text>, comme ceci :

<jsp:text>
Box Perimeter is: ${2*box.width + 2*box.height}
</jsp:text>

Les parenthèses peuvent être utilisées dans les expressions EL pour regrouper des sous-expressions. Par exemple, ${(1 + 2) * 3} est égal à 9, mais ${1 + (2 * 3)} est égal à 7.

Pour désactiver l'évaluation des expressions EL, vous devez utiliser la directive page pour définir la valeur de l'attribut isELIgnored sur true :

<%@ page isELIgnored ="true|false" %>

De cette façon, les expressions EL seront ignorées. Si elle est définie sur false, le conteneur évaluera les expressions EL.


Opérateurs de base en EL

Les expressions EL prennent en charge la plupart des opérateurs arithmétiques et logiques fournis par Java :

Operator Description
. Accéder à une propriété de Bean ou à une entrée de map
[] Accéder à un élément d'un tableau ou d'une liste
( ) Regrouper une sous-expression pour modifier la priorité
+ ajoutez
- Soustraction ou moins unaire
* multiply
/ ou div divide
% ou mod Modulo
== ou eq Test d'égalité
!= ou ne Test d'inégalité
< ou lt Test d'infériorité
> ou gt Test de supériorité
<= ou le Test d'infériorité ou d'égalité
>= ou ge Test pour supérieur ou égal à
&& ou and Test du ET logique
|| ou or Test du OU logique
! ou not Test du NON logique
empty Test de valeur vide

Fonctions dans JSP EL

JSP EL vous permet d'utiliser des fonctions dans les expressions. Ces fonctions doivent être définies dans des bibliothèques de balises personnalisées. La syntaxe d'utilisation d'une fonction est la suivante :

${ns:func(param1, param2, ...)}

ns fait référence à l'espace de noms, func fait référence au nom de la fonction, param1 fait référence au premier paramètre, param2 fait référence au deuxième paramètre, et ainsi de suite. Par exemple, il existe une fonction fn:length, définie dans la bibliothèque JSTL, qui peut être utilisée pour obtenir la longueur d'une chaîne comme suit :

${fn:length("Get my length")}

Pour utiliser les fonctions de n'importe quelle bibliothèque de balises, vous devez installer ces bibliothèques sur le serveur, puis les inclure dans les fichiers JSP à l'aide de la balise <taglib>.


Objets implicites de JSP EL

JSP EL prend en charge les objets implicites répertoriés dans le tableau suivant :

Objet implicite Description
pageScope Portée de page
requestScope Portée de requête
sessionScope Portée de session
applicationScope Portée d'application
param Paramètres de l'objet Request, String
paramValues Paramètres de l'objet Request, collection de String
header En-tête HTTP, String
headerValues En-tête HTTP, collection de String
initParam Paramètres d'initialisation du contexte
cookie Valeurs de cookie
pageContext Le pageContext de la page actuelle

Vous pouvez utiliser ces objets dans les expressions exactement comme des variables. Plusieurs exemples seront donnés ci-après pour mieux comprendre ce concept.


L’objet pageContext

L’objet pageContext est une référence à l’objet pageContext dans JSP. Grâce à l’objet pageContext, vous pouvez accéder à l’objet request. Par exemple, pour accéder à la chaîne de requête transmise par l’objet request, procédez comme ceci :

${pageContext.request.queryString}

Objets de portée

Les variables pageScope, requestScope, sessionScope et applicationScope sont utilisées pour accéder aux variables stockées à différents niveaux de portée.

Par exemple, si vous devez accéder explicitement à la variable box dans la couche applicationScope, vous pouvez y accéder comme ceci : applicationScope.box.


Les objets param et paramValues

Les objets param et paramValues servent à accéder aux valeurs des paramètres en utilisant la méthode request.getParameter et la méthode request.getParameterValues.

Par exemple, pour accéder à un paramètre nommé order, vous pouvez utiliser l’expression : ${param.order}, ou ${param["order"]}.

L’exemple suivant montre comment accéder au paramètre username dans la requête :

<%@ page import="java.io.*,java.util.*" %>
<%
    String title = "Accessing Request Param";
%>
<html>
<head>
<title><% out.print(title); %></title>
</head>
<body>
<center>
<h1><% out.print(title); %></h1>
</center>
<div align="center">
<p>${param["username"]}</p>
</div>
</body>
</html>

L’objet param renvoie une seule chaîne, tandis que l’objet paramValues renvoie un tableau de chaînes.


Les objets header et headerValues

Les objets header et headerValues sont utilisés pour accéder aux en-têtes en utilisant la méthode request.getHeader et la méthode request.getHeaders.

Par exemple, pour accéder à un en-tête nommé user-agent, vous pouvez utiliser l'expression : ${header.user-agent}, ou ${header["user-agent"]}.

L'exemple suivant montre comment accéder à l'en-tête user-agent :

<%@ page import="java.io.*,java.util.*" %>
<%
    String title = "User Agent Example";
%>
<html>
<head>
<title><% out.print(title); %></title>
</head>
<body>
<center>
<h1><% out.print(title); %></h1>
</center>
<div align="center">
<p>${header["user-agent"]}</p>
</div>
</body>
</html>

La sortie est la suivante :

jsp-expression-language

L'objet header renvoie une valeur unique, tandis que headerValues renvoie un tableau de chaînes de caractères.

Autres extensions